我目前有一种特殊类型,可以是 int 也可以是 float。我想创建一个函数,允许我将其中两个添加在一起。 (如有必要,将 int 强制转换为 float)我希望该函数具有我的特殊类型的返回类型。
这是我到目前为止所拥有的:
type number = A of int | B of float;;
let plus x1:number x2:number = (number x1) + (number x2);;
无法编译。但它看起来与我使用 ML 编程语言时编写的内容类似。
我的 plus
函数在 F# 中应该是什么样子?
最佳答案
type number = A of int | B of float;;
let plus x1:number x2:number = (number x1) + (number x2);;
您遇到的问题是双重的:
您不能使用具有单个值(在本例中为 A 和 B)的可区分联合案例,就好像您拥有该值一样。将每种情况视为一个类,其中有一个值(无论如何,这就是它在字节码中的表示方式)。在尝试使用该值之前,您需要从类中取出该值。
F# 不允许隐式转换。这意味着一旦您从案例中获取值,您将需要将它们转换为通用类型。在这种情况下,您需要将
A
值转换为float
或将B
值转换为int
.
正如 @JohnPalmer 在他的回答中指出的那样,解决这两个问题的最明确的方法是使用模式匹配。
关于f# - 使用强制 F# 创建具有自定义类型的 "plus"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580969/