itm*_*nus 4 .net c# f# .net-core
诸如此类的语言C#允许我们编写如下代码:
// C#
Console.WriteLine($"{3 > 2.3}"); // compare an int with a double
Run Code Online (Sandbox Code Playgroud)
但是F#不允许我们这样做。例如,
// F#
printfn "%A" (3 > 4) // fine
printfn "%A" (3.0 > 4.0) // fine
printfn "%A" (3 > 4.0) // wrong
Run Code Online (Sandbox Code Playgroud)
是否有特别的原因,为什么一些二进制运营商F#一样(+),(>),(<) 只接受参数必须是同一类型?
F#不执行隐式类型转换。隐式转换会产生问题,这就是为什么如此多的人对javascript产生不同情绪的部分原因。例如,请欣赏这首经典的JavaScript诗。隐式转换是使这首诗成为可能的基础。
> Array(16).join('wat' - 1) + ' Batman'
'NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman'
Run Code Online (Sandbox Code Playgroud)
3>“ 4”是什么,“ 4”> 3呢?您可能会找到对您有意义的答案,但是有很多有效的方法可以解释隐式转换的含义。在3> 4.0的情况下,此处的歧义可能不太明显,但是,如果您有明确转换的驱动原理,则最好将其普遍应用。