У меня есть класс, написанный на 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)
, которая, конечно, читается как "member Render
", принимает параметр string
, затем возвращает функцию, которая принимает IContext
и создает строку.
Если я изменю объявление "member" на привязку let, определив ее как функцию, локальную для определения класса:
let Render template (context: IContext) = ...
Затем подпись становится такой, какой вы ожидаете, - string -> IContext -> string
, которая гласит: «Render
берет строку, затем IContext
и создает строку».
Есть ли способ заставить члена вести себя как привязка let? Это вызывает проблемы, потребляющие этот элемент из C #, так как подпись становится Render(string, FastFunc<IContext, string>)
, что не слишком пригодно для использования.