#f#
#f#
Вопрос:
Я вызываю C # API, который использует перегрузки и необязательные параметры. К сожалению, одной из перегрузок является a params object[]
, и F # выбирает ее поверх более конкретной перегрузки, которую я намерен вызвать. Как мне заставить F # выбрать нужную перегрузку?
Вот небольшая репро. И вот ссылка на фактический API.
open System
open System.Linq.Expressions
type S =
static member Foo(expression: Expression<Func<int>>, ?gg: string) =
"expression"
static member Foo([<ParamArray>] args: obj[]) =
"params array"
[<EntryPoint>]
let main argv =
// This prints "params array", but I want it to print "expression"
let result = S.Foo(fun () -> 3, "")
printfn "%s" result
0
Ответ №1:
Чтобы вызвать версию выражения с двумя аргументами, вам нужно:
let result = S.Foo((fun () -> 3), "")
В вашем коде вы фактически определили функцию, которая возвращает (3, "")
кортеж, который является только одним аргументом.
Комментарии:
1. Ха-ха, это было глупо. Мне нужно было решить еще одну проблему в моем реальном коде, но это был первый шаг в правильном направлении. Спасибо.