gpt4 book ai didi

F# 签名文件 - 定义构造函数参数

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

我在为 F# 脚本文件创建签名文件时遇到错误,我无法解决这个错误。

要复制,请创建一个新的 F# 类库并添加一个文件 Test.fs:

namespace Signatures

open System

type Test (id : Guid, name : string) =

member this.Id = id
member this.Name = name

这将建立良好。然后在它上面新建一个签名文件,Test.fsi:
namespace Signatures

open System

type Test =

new : (Guid * String) -> Test

member Id : Guid
member Name : String

这现在不会生成错误 Module 'Signatures' requires a value 'new : (Guid * String) -> Test (这与您在两个文件中构造函数签名不同时得到的错误不同)。我能找到的关于在签名文件中定义构造函数的唯一真实文档是 MSDN并且处理无参数构造函数。

如果将鼠标悬停在 .fs 文件中的 Test 上,则构造函数的签名与 .fsi 文件中的签名相匹配。我也试过改变构造函数,这样它就不是隐含的了。

我正在使用 VS2012 RC,并尝试过 .Net 4 和 4.5。

最佳答案

评论太长了,所以我将其发布为答案。
Test的构造函数接收两个参数作为其参数,而不是一个是元组的参数。我承认*参数之间看起来很困惑。但签名Guid -> string -> Test甚至比这更糟糕。构造函数应该得到一些输入并产生一个新的类型实例。 Curried 形式和部分应用程序在构造函数的上下文中没有意义。

我认为括号有助于澄清这里。

type Test (id : System.Guid, name : string) =
member this.Id = id
member this.Name = name

生产 new : id:Guid * name:string -> Test尽管
type Test (tuple: System.Guid * string) =
let id, name = tuple
member this.Id = id
member this.Name = name

给我 new : tuple:(Guid * string) -> Test在 FSI session 中。我使用 F# 2.0/MonoDevelop 3.0 作为记录。

关于创建类型签名,我通常将代码发送到 F# Interactive 并将生成的签名复制到 fsi文件以避免错误。如果工具提示和 F# Interactive 在 VS2012 RC 上错误地显示类型签名,您应该在 fsbugs (at) microsoft (dot) com 上报告。

关于F# 签名文件 - 定义构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11726790/

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