我对 Literal 关键字以及为什么它在 F# 中是必要的感到有点困惑。
阅读文档,我觉得[<Literal>]
用于定义一个常量,但是我有点困惑这个常量与 F# 中的所有其他常量有何不同。
打算作为常量的值可以用
文字属性。该属性具有使值变为
被编译为常量。
当我想到常数时,我想到的是一些不可变的东西......
let x = "a" + "b" //this is a immutable value, its value is constant
[<Literal>]
let y = "a" + "b" //this is also a immutable value, but why is this a special constant?
是否因为“正常”F# 值被延迟计算并且[<Literal>]
没有被懒惰地评估..?这就是他们所说的“编译为常量”的意思吗?或者还有别的什么吗?
在你的例子中,x
是在运行时分配的不可变值(但不延迟计算),而y
在编译时分配。举个例子,
let myDLL = "foo.dll"
[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()
不起作用,因为 DllImport 是一个属性,需要知道其值myDLL
编译期间。但是,这会起作用:
[<Literal>]
let myDLL = "foo.dll"
[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)