【发布时间】:2010-02-11 07:25:34
【问题描述】:
向成员添加属性效果很好,因为语法与在类型中定义成员时完全相同。
[<TypeAttribute>]
let Foo () =
{
new Baz with
[<MethodAttribute>]
member x.Booga () = ()
}
以上无法编译,出现 AttributeUsage 异常“此属性不适用于此语言元素”。
即使我添加属性提示,此错误也不会消失:
[<type: TypeAttribute>]
如果将属性移到对象表达式旁边,似乎有意义的地方,代码甚至不会解析。
let Foo () =
[<TypeAttribute>]
{
new Baz with
member x.Booga () = ()
}
解析错误是“Unexpected symbol '[
let Foo () =
{
[<TypeAttribute>]
new Baz with
member x.Booga () = ()
}
在此处移动属性无法解析“表达式中出现意外符号'[
所以此时我的选择是放弃使用对象表达式,转而使用模块中的私有类型。
[<TypeAttribute>]
type private myBaz () =
interface Bax with
member x.Booga () = ()
let Foo () = new myBaz ()
这很好,但我更喜欢允许使用对象表达式的替代方法。
还有其他选择吗?
【问题讨论】:
标签: f#