在F#中使用元组参数调用BCL函数

dev*_*ium 1 .net f# functional-programming

从我读过的,如果我没有弄错,似乎任何BCL方法都将其参数作为F#中的元组接收.所以我想知道是否而不是

let rndNumber= rng.Next(-10, 10)
Run Code Online (Sandbox Code Playgroud)

我可以有类似的东西

let range = (-10, 10)
let rndNumber = rng.Next range
Run Code Online (Sandbox Code Playgroud)

完整代码如下:

open System
let rng = new Random()
let range = (-10, 10)
let rndNumber = rng.Next range
Run Code Online (Sandbox Code Playgroud)

而我得到的错误是

This expression was expected to have type
    int    
but here has type
    int * int    
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 7

你可以有一个.NET方法重载,它也只需要一个类型的参数System.Tuple,这使问题变得复杂.

通常,F#查看方法的调用站点,并在语法上确定要尝试的重载.当您调用o.M aTupleVarF#尝试查找采用单个参数(即元组)的方法时,而不是多个参数.

由于没有对方法的语法调用,所以"管道"工作方式Daniel建议起作用,因此F#只解析rng.Next为具有该名称的方法的重载组,并在以后解析该调用.

也就是说,实践中几乎没有理由这样做.如果您要调用.NET方法,直接使用它o.M(arg1,arg2),则很少需要/希望首先创建元组.