F#中方法的多个参数

时间:2009-02-25 19:51:48

标签: 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 in parser.Parse tokens None do
        ignore <| resp.Append(node.render context)

    resp.ToString()

此方法的签名为template:string -> (IContext -> string),当然读作“成员Render接受string参数,然后返回一个带IContext的函数并生成一个字符串。

如果我将声明从“member”更改为let绑定,则将其定义为类定义的本地函数:

let Render template (context: IContext) = ...

然后签名成为您期望的签名 - string -> IContext -> string,其中读取“Render接受字符串,然后IContext并生成字符串”。

有没有办法让成员表现得像let绑定?这导致从C#中消耗此成员的问题,因为签名变为Render(string, FastFunc<IContext, string>),这不会过度使用。

1 个答案:

答案 0 :(得分:4)

如果你想暴露给C#,你应该把它写成tupled style:

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

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

这将暴露一种普通的.NET风格方法。

相关问题