Interface F#接口语法,用于声明具有byref返回对象(或元组)的函数,如Int32.TryParse

Interface F#接口语法,用于声明具有byref返回对象(或元组)的函数,如Int32.TryParse,interface,f#,Interface,F#,我无法找到如何在接口中声明函数以获得元组或byref结果。 我想模拟以下语法: let executed,value=Int32.TryParse(“123”) 假设我有一个带有2个输入参数的函数,我想知道结果是否成功,以及是否有结果(本例中的记录类型)。种类: type Result={reference:string;value:decimal} 类型执行器= 抽象成员DoStuff:(aa:string)*(bb:string)*(result:byref)->bool 抽象成员DoSt

我无法找到如何在接口中声明函数以获得元组或byref结果。
我想模拟以下语法:

let executed,value=Int32.TryParse(“123”)
假设我有一个带有2个输入参数的函数,我想知道结果是否成功,以及是否有结果(本例中的记录类型)。种类:

type Result={reference:string;value:decimal}
类型执行器=
抽象成员DoStuff:(aa:string)*(bb:string)*(result:byref)->bool
抽象成员DoStuff:(aa:string,bb:string,result:byref)->bool
类型执行器()=
member this.DoStuff(aa:string,bb:string,result:byref):bool=

result首先声明一个接口,使用抽象成员,只应用签名

type IExecutor =

    abstract member DoStuff: string*string*outref<int>->bool 
话虽如此,如果您仅从F#中使用此项,请避免使用OUTREF和元组:

type IExecutor =

    abstract member DoStuff: string->string->bool*int

type Executor() =

   interface IExecutor with

     member this.DoStuff  (a:string) (b:string)  : bool*int =
       true,3

let s = new Executor() :> IExecutor

let a,b = s.DoStuff "lorem" "ipsum"

我认为您需要声明一个
outref
参数,请参阅我发现了错误并从接口参数中删除了名称,但我使用了byref(仍然未测试)。为什么建议使用outref而不是byref?@Alex75 byref不允许使用元组返回。您必须显式地传递一个引用参数,例如let mutable m=0 s。let b=DoStuff(“lorem”、“ipsum”、ref m)。
let s = new Executor() :> IExecutor

let a,b = s.DoStuff ( "lorem" "ipsum" )
type IExecutor =

    abstract member DoStuff: string->string->bool*int

type Executor() =

   interface IExecutor with

     member this.DoStuff  (a:string) (b:string)  : bool*int =
       true,3

let s = new Executor() :> IExecutor

let a,b = s.DoStuff "lorem" "ipsum"