gpt4 book ai didi

f# - []与F#中的其他常数有何不同

转载 作者:行者123 更新时间:2023-12-03 10:08:01 25 4
gpt4 key购买 nike

我对Literal关键字以及为什么在F#中有必要感到困惑。

阅读文档后,我觉得[<Literal>]用于定义一个常量,但是我有点困惑这个常量与F#中所有其他常量的区别。

Values that are intended to be constants can be marked with the Literal attribute. This attribute has the effect of causing a value to be compiled as a constant.



当我想到一个常数时,我想到了一个不变的东西。
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()

关于f# - [<Literal>]与F#中的其他常数有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com