F#不支持隐式转换。我知道这是一项功能,但是我不明白为什么即使没有信息丢失也禁止隐式转换。例如:
sqrt 4 // Won't compile.
我看不到将
int
4隐式转换为float
的问题,这是sqrt
所需的。谁能阐明这一点?
最佳答案
因为它的类型检查器几乎依赖于经典的强类型重构。您的示例要求强制类型,这可以通过隐式强制转换或弱类型系统来实现,但是在这种类型推断中不允许使用这些类型。
由于 F#来自OCaml,它具有一种类型重构,可以通过极高的学问来保证程序的正确性:该算法试图将程序的整个类型统一为一个好的类型,而如果弱类型规则无法实现允许考虑一个像浮点数的整数。
关于f# - 为什么在F#中没有隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4111627/