Несколько параметров для методов в F # - PullRequest
1 голос
/ 25 февраля 2009

У меня есть класс, написанный на 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>), что не слишком пригодно для использования.

1 Ответ

4 голосов
/ 25 февраля 2009

Если вы хотите выставить на C #, вы должны написать его в стиле:

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

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

Это откроет обычный метод стиля .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...