使用默认的int*int类型除法键入Constraint Mismatch

GWL*_*osa 0 .net f#

所以我正在研究一些示例F#代码,并遇到以下片段:

let divRem a b = 
    let x = a / b
    let y = a % b
    (x,y)
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到以下错误:

HelloWorld\Program.fs(15,14):错误FS0071:对类型推断变量应用默认类型"int*int"时,类型约束不匹配.类型'(int*int)'不支持任何名为'/'的运算符.考虑添加更多类型约束

但是,做类似的事情

let print n = System.Console.WriteLine(n.ToString())
print (4/2)
Run Code Online (Sandbox Code Playgroud)

结果是

2

为什么整数除法运算在函数定义中不可用?

编辑: 这是无法编译的代码的完整示例.

let divRem a b = 
    let x = a / b
    let y = a % b
    (x,y)

let print n = System.Console.WriteLine(n.ToString())
print (divRem (5,3))
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 7

问题是你在F#中调用函数时不使用逗号,逗号用于创建元组.代码应该是:

let divRem a b = 
    let x = a / b
    let y = a % b
    (x,y)

let print n = System.Console.WriteLine(n.ToString())
print (divRem 5 3)
Run Code Online (Sandbox Code Playgroud)

  • 逗号创建元组,括号将事物组合在一起以控制元组的内容.如果你在3和5之间放置一个逗号,代码会编译,因为你创建了一个``(int - > int*int)*int``的元组,这是完全有效但可能不是你想要的.你可以看到这一点,当运行代码时,运行3到5之间的逗号,你会看到``(Program + clo @ 7,3)``打印到控制台. (3认同)