我今天玩了一点 F#,写了这个:
let sq x = x * x
let i = sq 3
let d = sq 3.0
如果我删除第三行或第四行,它会编译,但如果两者都存在,则不会编译。
我收到错误
This expression should have type 'int', but has type 'float'
.
最佳答案
类型推断有效,因此您的函数 sq
有类型 int -> int
,因为编译器第一次看到你使用那个函数,你传递给它一个整数。所以它假设 sq
是一个接受整数的函数,根据函数的定义 ( x * x
) 它还返回一个整数。
在 F# 中定义一个完全通用的算术函数有点复杂,但一种方法是使函数 inline
,像这样:
let inline sq x = x * x
这样你的函数体每次都会在调用站点被内联,所以使用内联
sq
function 将与每次使用时替换它的 body 相同。这种方法有它的缺点,我认为你看到 this question 会很有趣。 .
关于f# - 为什么不能使用不同类型的参数两次使用相同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17762670/