2009-02-25 49 views
1

我有寫在我消耗在C#F#的一類,它定義的方法Render多個參數在F#方法

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 Render template (context: IContext) = ... 

那麼簽名成爲你希望它是什麼 - string -> IContext -> string,其內容爲「Render需要一個字符串,那麼IContext併產生一個字符串」。

有沒有一種方法,使成員的行爲類似於讓利結合?這導致了C#中此成員的問題,因爲簽名變爲Render(string, FastFunc<IContext, string>),這不是太可用。

回答

4

如果你希望暴露給C#中,你應該把它寫tupled風格:

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

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

這會暴露一個正常的.NET風格的方法。

+0

確保您提供的元組對象的名稱。 – MichaelGG 2009-02-25 22:29:19