gpt4 book ai didi

function - F# 函数参数类型注释不起作用

转载 作者:行者123 更新时间:2023-12-02 19:11:02 26 4
gpt4 key购买 nike

我希望 F# 函数中的参数具有特定类型:

type NewType = string*int

let testFunction (arg1:NewType) : NewType =
("resultString", 2)

testFunction ("test", 3)

我希望函数的类型为:

NewType -> NewType

但是函数类型是:

string*int -> NewType

我应该怎么做才能强制参数 arg1 的类型为“NewType”?

最佳答案

type NewType = string * int 就是所谓的类型缩写。它为另一种类型提供名称或别名,但在编译期间会被删除。没有封装,没有新的引用,基本上没有新类型。

它可以用作文档,但 F# 编译器将新名称和别名类型视为相同。如果您使用 NewType 创建一个带有公共(public)函数/方法的 DLL 并尝试从另一个项目调用它,这一点尤其明显 - 您将看到像您的情况一样的混合结果。

如果您想要实现的只是更好的可读性,这可能不是问题。如果我在代码中看到 let testFunction (arg1:NewType) : NewType = ... ,尤其是在 GitHub 等网络上,那里没有 IntelliSense 工具提示,这仍然让我很好地了解什么该函数接受并返回,即使实践中的“真实”类型是 string * int。

如果您想要更好的类型安全性,通常的做法是定义单例区分联合,您可以将其与模式匹配结合起来,如下所示:

type NewType = NewType of (string * int)

let testFunction (NewType arg1): NewType =
NewType ("resultString", 2)

testFunction (NewType ("test", 3))

您可以在此处以及该系列的其他文章中阅读更多内容:https://fsharpforfunandprofit.com/posts/type-abbreviations/

关于function - F# 函数参数类型注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46432442/

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