【发布时间】:2009-02-25 19:51:48
【问题描述】:
我有一个用 C# 编写的 F# 类,它定义了一个方法 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并产生字符串的函数。
如果我将声明从“成员”更改为 let 绑定,将其定义为类定义的本地函数:
let Render template (context: IContext) = ...
然后签名变成您期望的样子 - string -> IContext -> string,其内容为“Render 接受一个字符串,然后是 IContext 并产生一个字符串”。
有没有办法让成员表现得像 let 绑定?这会导致从 C# 中使用此成员时出现问题,因为签名变为 Render(string, FastFunc<IContext, string>),这不是过度使用。
【问题讨论】:
标签: f#