我正在试图弄清楚如何使用C#程序集中的F#库,我已经使用了C#,但从未使用过F#。
这是F#Class ..
namespace FLib
type Class1() =
member this.square(x)=x*x
member this.doit(x, op) = List.map op (Seq.toList(x))|>List.toSeq
member this.squareAllDirect(x) = List.map this.square (Seq.toList(x))|>List.toSeq
member this.squareAllIndirect(x) = this.doit x, this.square
这是使用它的C#
class Program
{
static void Main(string[] args)
{
FLib.Class1 f = new FLib.Class1();
List<int> l=new List<int>(){1,2,3,4,5};
var q =f.squareAllDirect(l);
var r = f.squareIndirect(l);
foreach (int i in r)
Console.Write("{0},",i);
Console.ReadKey();
}
}
squareAllDirect函数按预期工作...但来自c#的squareAllIndirect调用有一个异常: 无法从用法推断出方法'FLib.Class1.squareAllIndirect(System.Tuple,Microsoft.FSharp.Core.FSharpFunc'2&gt;)'的Type参数。尝试明确指定类型参数。
答案 0 :(得分:3)
看起来您希望squareAllIndirect
函数能够获取并返回int seq
但是,如果将鼠标悬停在它上面,您将看到它并返回int seq * (int -> int)
元组的优先级低于函数调用,因此x
作为两个参数传递给doit
。
您需要在()
。
member this.squareAllIndirect(x) = this.doit(x, this.square)
这将确保您获得并返回您期望的内容。