2010-02-10 80 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() 

这工作正常,但我更愿意来代替,使对象表达式的替代品。

是否有其他选择吗?

回答

相关问题