我正在尝试创建一个F#函数的.NET列表,但它一直告诉我它需要一些东西,但却有一个'而不是。我不确定,但我猜它是因为我无法创建一个F#函数的.NET列表。这是真的吗?
例如,当我尝试:
let listOfFunctions = new List<int -> unit>()
编译器相应地抱怨:
No constructors are available for the type 'List<(int -> unit)>'
修改
经过深思熟虑,我意识到,我忘了打开System.Collections.Generic,这导致了这个问题。我没有注意到这个问题,因为编译器认为它是一个F#列表,它没有像.NET Lists这样的构造函数。但是,由于类型签名看起来相同,所以令人困惑。请考虑以下代码:
let FSharpList : List<int> = [1;2;3]
let DotNetList : List<int> = new List<int>()
如果您不使用开放的System.Collections.Generic,编译器会将List视为F#列表,第二行显然会失败。但是如果你包含它,那么编译器将假设List是一个.NET列表,并且第一行会抱怨[1; 2; 3]应该具有类型List<int>
,而是具有类型{{1} (也就是说它期待一个.NET列表)。
实际上,它与函数列表完全无关。实际上,以下代码:
'a list
工作正常。