f# - paso - publicidad en facebook ads
¿Cómo creo un miembro que tiene un parámetro de salida en F# (2)
No, no puede devolver el resultado como una tupla; debe asignar el valor al valor de byref antes de devolver el resultado de la función. También tenga en cuenta el atributo [<Out>]
: si lo deja fuera, el parámetro actúa como un parámetro de ref
C #.
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"
Si desea que su método tenga una firma canónica de Try
C # (por ejemplo, Int32.TryParse
), debe devolver un bool
de su método y pasar el Foo
posiblemente analizado de nuevo a través de la byref<''T>
, así:
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"
Sé que en f # puedo tratar out
parámetros como miembros de una tupla de resultados cuando los estoy usando desde F #, por ejemplo
(success, i) = System.Int32.TryParse(myStr)
Lo que me gustaría saber es cómo defino que un miembro tenga una firma que parezca que C # tiene un parámetro de out
.
¿Es posible hacer esto? ¿Y puedo devolver una tupla y hacer que ocurra el proceso opuesto cuando llamo al método desde C #, por ejemplo?
type Example() =
member x.TryParse(s: string, success: bool byref)
= (false, Unchecked.defaultof<Example>)
open System.Runtime.InteropServices
type Test() =
member this.TryParse(text : string, [<Out>] success : byref<bool>) : bool =
success <- false
false
let ok, res = Test().TryParse("123")