Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# F中方法的多个参数#_F# - Fatal编程技术网

F# F中方法的多个参数#

F# F中方法的多个参数#,f#,F#,我有一个用F#编写的类,我用C#使用它,它定义了一个方法Render: member this.Render template (context: IContext) = let tokens = Lexer.tokenize template let parser = new DefaultParser([for filter in _filters -> filter]) let resp = new StringBuilder() for node

我有一个用F#编写的类,我用C#使用它,它定义了一个方法
Render

member this.Render template (context: IContext) =
    let tokens = Lexer.tokenize template
    let parser = new DefaultParser([for filter in _filters -> filter])

    let resp = new StringBuilder()
    for node in parser.Parse tokens None do
        ignore <| resp.Append(node.render context)

    resp.ToString()
然后签名就变成了您所期望的-
string->IContext->string
,其内容为“
Render
获取一个字符串,然后是一个
IContext
并生成一个字符串”

有没有办法使成员的行为类似于let绑定?这会导致从C#使用此成员时出现问题,因为签名变成了
Render(string,FastFunc)
,这是不可过度使用的。

如果要向C#公开,应以元组样式编写:

> type Foo =
-   member this.Bar (param1, param2) =  param1 + param2;;

type Foo =
  class
    member Bar : param1:int * param2:int -> int
  end
这将公开一个普通的.NET样式的方法。

如果要公开给C#,应该以元组样式编写:

> type Foo =
-   member this.Bar (param1, param2) =  param1 + param2;;

type Foo =
  class
    member Bar : param1:int * param2:int -> int
  end

这将公开一个普通的.NET样式的方法。

请确保为元组中的对象提供名称。对不起,这是一个稍微不同的问题。您的建议适用于具体成员,但不适用于在f#中定义然后在c#中实现的接口。这些被理解为元组,请确保您为元组中的对象提供名称。对不起,这是一个稍微不同的问题。您的建议适用于具体成员,但不适用于在f#中定义然后在c#中实现的接口。它们被认为是元组