【发布时间】:2017-04-21 08:41:06
【问题描述】:
在 F# 中,我可以将字符串与 + 运算符组合如下:
let myString = "one" + "two"
但是,当我创建一个接受两个参数并应用相同运算符的函数,并将其放入在使用之前声明的模块中时,F# 将类型推断为整数:
module StringFunctions =
let add str1 str2 =
str1 + str2
调用下面的代码给了我构建错误,“表达式应该有类型'int',但这里有类型'string'”:
let str3 = StringFunctions.add "three" "four"
为什么 F# 将其推断为 int?我假设它不能是通用方法,因为并非所有类型都会实现 + 运算符,但为什么它假定为 int?
【问题讨论】:
-
stackoverflow.com/a/3754961/2314532 将大大有助于回答您的问题。
-
我不认为这个问题与F# generics / function overloading syntax 完全相同,尽管它非常接近。所以我给出了一个简短的回答;阅读链接的问题以获得更详细的解释。
-
@spmdc - 我认为 rmunn 的回答对于 F# 的新手来说更加简洁和有用。你提到的问题是一个飞跃太远了。
标签: f# type-inference