3

不知道其他 30 篇文章是如何在这里对我没有帮助的,但我正在使用带有这些重载的 ac# dll:

function TqlForBidAskTrade(string, int?, params string[])
function TqlForBidAskTrade(string[], int?, params string[])

我可以在 c# 中使用我想要的参数调用此方法,如下所示:

TqlForBidAskTrade("string", null)

F# 中的等价物是什么?我似乎根本无法编译任何东西。我试过了:

TqlForBidAskTrade("string", null)
TqlForBidAskTrade("string", Nullable<int>())
TqlForBidAskTrade("string", Nullable<int>(), null)
TqlForBidAskTrade("string", Nullable<int>(), [])
TqlForBidAskTrade("string", Nullable<int>(), ["doodah"])
TqlForBidAskTrade("string", 4, ["doodah"])

看起来我应该偶然发现所有类似的请求,但我一直在寻找一个小时。

4

2 回答 2

5

和... 掌心。
TqlForBidAskTrade("string", Nullable()) 确实有效,在我的随机代码修补中,我弄乱了语法。

于 2013-02-22T21:24:20.090 回答
5

您找到了解决方案,但要添加一些解释:

C# 编译器会Nullable<T>特别对待。一个例子是null可以代替new Nullable<T>()。这是另一个例子

在 F# 中,Nullable<'T>只是另一种类型:没有糖,没有魔法。option<'T>是最接近Nullable对应物的东西,用于可选参数。如果在 F# 中定义,您的函数可能如下所示:

type T =
  static member TqlForBidAskTrade(s:string, ?n:int, ?args:string[]) = ()

T.TqlForBidAskTrade("foo")
于 2013-02-22T21:30:01.063 回答