tutorial publicidad paso hacer gratis curso como anuncios anuncio administrador f# clr

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")