我想为F#函数中的参数指定特定类型:type NewType = string*intlet testFunction (arg1:NewType) : NewType = ("resultString", 2)testFunction ("test", 3)我希望函数的类型为:NewType -> NewType但是函数类型是:string*int -> NewType我应该怎么做才能将参数arg1的类型强制为“ NewType”? 最佳答案 type NewType = string * int是所谓的类型缩写。它给其他类型指定了名称或别名,但是在编译过程中将其删除。没有封装,没有新的引用,基本上根本没有新的类型。它可以用作文档,但是F#的编译器将新名称和别名类型视为相同。如果使用公共函数/方法(使用NewType)创建DLL并尝试从另一个项目中调用它,这将尤其明显-您将看到混合的结果,如您的情况。如果您想要实现的只是更好的可读性,那么这可能不是问题。如果我在代码中看到let testFunction (arg1:NewType) : NewType = ...,尤其是在类似GitHub这样的Web上,那里没有IntelliSense工具提示,那么即使在实践中“真实”类型为。如果需要更好的类型安全性,通常的做法是定义一个区分大小写的联合,您可以将其与模式匹配结合使用,如下所示:type NewType = NewType of (string * int)let testFunction (NewType arg1): NewType = NewType ("resultString", 2)testFunction (NewType ("test", 3))您可以在此处以及该系列的其他文章中阅读更多内容:https://fsharpforfunandprofit.com/posts/type-abbreviations/
10-01 00:14