温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - F#: Specifying a custom type in function declaration (complex number to pair)
f#

其他 - F#:在函数声明中指定自定义类型(要配对的复数)

发布于 2020-04-16 13:34:23

我指定了一个自定义类型,该类型需要两个浮点数并使它们成为一对(复数):

type complex = (float * float);;

let makeComplex x y = complex(x,y);;

makeComplex函数的类型为float -> float -> complex,这是完全正确的。但是,我想创建一个采用复杂类型并将其设为普通对的函数。这是我尝试过的功能:


let complexToPair ((x,y):complex) = (x,y);;

但是最终的类型是float * float -> float * float何时应该是complex -> float * float我是否使用了错误的语法((x,y):complex)

查看更多

提问者
ConradDoggo
被浏览
59
glennsl 2020-02-04 14:15

类型缩写不会隐藏或创建与其定义不同的类型。complex并且float * float仍然可以完全互换,您刚刚给它起了另一个名字。

在F#中创建独特类型的惯用方式是使用区分大小写的联合:

type complex = Complex of float * float

然后,您可以使用以下构造函数编写函数,以创建值和模式匹配以对其进行解构:

let makeComplex x y = Complex (x,y)
let complexToPair (Complex (x, y)) = (x, y)

您还可以使用private以下命令从模块外部完全隐藏实现

type complex = private Complex of float * float

消费者然后必须使用您公开的函数来创建和使用该complex类型的