Ответ 1
Нет, вы не можете вернуть результат в виде кортежа - вам нужно присвоить значение значению byref перед возвратом результата из функции. Также обратите внимание на атрибут [<Out>]
- если вы оставите это, параметр действует как параметр С# ref
.
open System.Runtime.InteropServices
type Foo () =
static member TryParse (str : string, [<Out>] success : byref<bool>) : Foo =
// Manually assign the 'success' value before returning
success <- false
// Return some result value
// TODO
raise <| System.NotImplementedException "Foo.TryParse"
Если вы хотите, чтобы ваш метод имел каноническую подпись С# Try
(например, Int32.TryParse
), вы должны вернуть bool
из своего метода и передать возможно-проанализированный Foo
обратно через byref<'T>
, вот так:
open System.Runtime.InteropServices
type Foo () =
static member TryParse (str : string, [<Out>] result : byref<Foo>) : bool =
// Try to parse the Foo from the string
// If successful, assign the parsed Foo to 'result'
// TODO
// Return a bool indicating whether parsing was successful.
// TODO
raise <| System.NotImplementedException "Foo.TryParse"