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)
你可以有一个.NET方法重载,它也只需要一个类型的参数System.Tuple,这使问题变得复杂.
通常,F#查看方法的调用站点,并在语法上确定要尝试的重载.当您调用o.M aTupleVarF#尝试查找采用单个参数(即元组)的方法时,而不是多个参数.
由于没有对方法的语法调用,所以"管道"工作方式Daniel建议起作用,因此F#只解析rng.Next为具有该名称的方法的重载组,并在以后解析该调用.
也就是说,实践中几乎没有理由这样做.如果您要调用.NET方法,直接使用它o.M(arg1,arg2),则很少需要/希望首先创建元组.