gpt4 book ai didi

f# - 无法在F#签名文件(.fsi)中使用Literal属性

转载 作者:行者123 更新时间:2023-12-04 04:42:17 25 4
gpt4 key购买 nike

我无法在F#签名文件中定义文字。

我有一个文件File.fs,如下所示:

module Thingo =
[<Literal>]
let hello = "world"

我需要为其创建一个签名文件,因此最初尝试了此操作( File.fsi):
module Thingo =
[<Literal>]
val hello : string

这在 File.fsi中导致以下错误: A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
我试了一下:
module Thingo =
[<Literal>]
val hello : string = "world"
val hello声明后的行收到错误: Incomplete structured construct at or before this point in signature file. Expected incomplete structured construct at or before this point or other token.
因此,它不喜欢我在签名文件中分配值(或者我不知道如何分配值,很有可能)。

文档说我确实需要以某种方式分配签名中的值:

If the Literal attribute is used, it must appear in both the signature and the implementation, and the same literal value must be used for both.



(来自 https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/signatures)

我还自动生成了一个签名文件(带有 --sig build参数),它散发出来:
module EventSchema = begin
[<LiteralAttribute ()>]
val id : string
end

我尝试了这种确切的语法,但是也没有用。

谢谢阅读!任何建议将不胜感激。

最佳答案

正确的答案应该是:这是一个错误。据报道这里:https://github.com/dotnet/fsharp/issues/7897

请注意,作为一种解决方法,您可以关闭light语法,然后在当前版本中使用。

还要注意,当常量值与签名文件中的常量不匹配时,编译器将出错。

关于f# - 无法在F#签名文件(.fsi)中使用Literal属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212721/

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