gpt4 book ai didi

.net - 除了必须总是自己编写之外,如何确保我们的函数在 F# 中使用缩写类型而不是基元?

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

假设我已经定义了一些类型缩写

type Individual = Double array

并且我在整个 F# 项目中都在使用它:
let generateIndividual = [|1.0; 2.0|]

智能感知告诉我 generateIndividual有一个关联的返回类型 float[] .因为我希望它出现 Individual作为返回类型,我将其签名更改为
let generateIndividual : Individual = [|1.0; 2.0|]

使用内部代码时,Intellisense 显示的内容并不重要。但是当做用于外部世界的 API 时,让我的函数显示别名而不是原始类型似乎更漂亮。

除了上面显示的方法之外,还有什么办法可以避免输入它们吗?根据斯文森的建议,我查看了签名文件,虽然起初它们似乎正是我想要的,但它们似乎无法做到。

最佳答案

键入别名,例如您的 Individual如果您使用显式注释来标记具有类型的值(或函数参数和结果),则仅在 F# 中可见。在编译时,别名被替换为实际类型(例如 Double array )。这意味着 F# 将两者视为相同的类型,并且无法保证您只会看到别名。您可以在任何地方添加类型注释,但如果其他人使用该类型,他们也必须这样做。

如果要确保,则需要使用包装器。具有单个案例的可区分联合是很好的方法,因为它们易于构造和分解:

type Individual = Individual of Double array

// Creating single-case union
let generateIndividual = Individual [|1.0; 2.0|]

// Decomposing single-case union
let sumIndividual (Individual data) = Array.sum data

关于.net - 除了必须总是自己编写之外,如何确保我们的函数在 F# 中使用缩写类型而不是基元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382680/

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