如果我在下面创建添加功能
let add x y =
x + y
然后单独运行下面的行,我会收到一条错误消息,因为默认情况下F#会假定x和y应该为整数。
add 5.4 3.2
就是说,如果我一起运行它们,那么add的工作就很好了,因为它现在将其视为一个具有两个浮点数的函数(这意味着编译器会提前进行类型推断)。
这就引出了一个问题,为什么相同的前瞻过程不允许F#知道toHackerTalk正在接收字符串?即使我一起运行以下各行,由于短语的类型不确定,也会给我一个错误。
let toHackerTalk phrase =
phrase.Replace('t', '7').Replace('o', '0')
toHackerTalk "this be strange"
最佳答案
我认为这是简单的看法。在第一种情况下,编译器了解+
(它是在F#内核中定义的),并且仅选择默认类型的int
(可能在规范中的某个地方定义),如果它看到了float
用法,则选择其他版本的+
。
另一方面,编译器没有足够的信息来选择具有Replace
成员的类型,因此它无法编译该函数