C#
等语言允许我们编写如下代码:
// C#
Console.WriteLine($"{3 > 2.3}"); // compare an int with a double
但是F#
不允许我们这样做。例如,
// F#
printfn "%A" (3 > 4) // fine
printfn "%A" (3.0 > 4.0) // fine
printfn "%A" (3 > 4.0) // wrong
F#
中的某些二元运算符有什么特殊原因吗?喜欢 (+)
, (>)
, (<)
只接受必须是相同类型的参数?
最佳答案
F# 不进行隐式类型转换。隐式转换会产生问题,这也是为什么这么多人对 javascript 情绪复杂的部分原因。例如,请欣赏这首经典的 javascript 诗。隐式转换是使这首诗成为可能的基础。
> Array(16).join('wat' - 1) + ' Batman'
'NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman'
什么是3>“4”,那么“4”>3呢?你可能有对你有意义的答案,但是有很多有效的方法来解释隐式转换应该是什么。对于 3 > 4.0,此处的歧义可能不那么明显,但是当您有显式转换的驱动理念时,最好将其普遍应用。
关于c# - F# 中的某些二元运算符(如 (+) 、 (>) 、 (<) )只接受必须是相同类型的参数是否有特殊原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56980816/