dev*_*ium 5 .net f# functional-programming
假设我已经定义了一些类型缩写
type Individual = Double array
Run Code Online (Sandbox Code Playgroud)
并且我在整个F#项目中使用它:
let generateIndividual = [|1.0; 2.0|]
Run Code Online (Sandbox Code Playgroud)
IntelliSense告诉我generateIndividual
有一个相关的返回类型float[]
.因为我希望它显示Individual
为返回类型,我将其签名更改为
let generateIndividual : Individual = [|1.0; 2.0|]
Run Code Online (Sandbox Code Playgroud)
使用内部代码时,Intellisense显示的内容并不重要.但是当做用于外部世界的API时,让我的函数显示别名而不是基本类型似乎更漂亮.
除了通过上面显示的方法之外,是否有可能以任何方式避免键入它们?根据Swensen的建议,我看了一下Signature文件,虽然起初它们似乎正是我所寻找的,但它们似乎无法做到.
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
180 次 |
最近记录: |