2010-02-10 31 views
2

向成員添加屬性非常有效,因爲語法與在類型中定義成員時的語法完全相同。F#:有沒有方法可以通過ObjectExpression向類型輸出添加屬性

[<TypeAttribute>] 
let Foo() = 
    { 
    new Baz with 
     [<MethodAttribute>] 
     member x.Booga() =() 
    } 

上面未能使用AttributeUsage異常編譯「此屬性對此語言元素無效」。

此錯誤不會消失,即使我添加屬性提示:

[<type: TypeAttribute>] 

如果該屬性對象旁邊的表達,它似乎是有道理的去移動,代碼沒有按」甚至解析。

let Foo() = 
    [<TypeAttribute>] 
    { 
    new Baz with 
     member x.Booga() =() 
    } 

解析錯誤是「意外的符號‘[<’的結合。

let Foo() = 
    { 
    [<TypeAttribute>] 
    new Baz with 
     member x.Booga() =() 
    } 

這裏移動屬性失敗,解析」在表達意外符號‘[<’。預期的'}'或其他令牌','不匹配的'{'「和」意外的關鍵字'成員'在定義中...「。最壞的結果呢。

所以在這一點上我的選擇是放棄使用贊成模塊中的私有類型的對象表達。

[<TypeAttribute>] 
type private myBaz() = 
interface Bax with 
    member x.Booga() =() 

let Foo() = new myBaz() 

這工作正常,但我更願意來代替,使對象表達式的替代品。

是否有其他選擇嗎?

回答

相關問題