c# - F# 中的某些二元运算符(如 (+) 、 (>) 、 (<) )只接受必须是相同类型的参数是否有特殊原因?

标签 c# .net .net-core f#

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/

相关文章:

c# - 在一个 Json 中创建多个表而不使用 JArray?

c# - T4MVC 无法使用 ErrorGeneratingOutput 生成类

c# - .Net Core Integration TestServer 与 Generic IHostBuilder

angular - 即使启用了 CORS,Ionic 2 也无法发布到 asp dotnet 核心

c# - 在测试期间设置变量值

c# - 创建变量类型列表

c# - 如何计算其他国家的时间。在 C# 中使用我的本地机器时间?

.net - 根据属性值过滤linq列表

.net - 扩展方法是否太昂贵?

c# - 读流两次?