代码之家  ›  专栏  ›  技术社区  ›  elmattic

ReflectedDefinition属性的问题

  •  1
  • elmattic  · 技术社区  · 15 年前

    我有一个代码,自从我在上一个f ctp 1.9.7.8上之后就不再编译了:

    [<Struct>]
    type MyStruct =
        val mutable private _i : int
        val mutable private _s : single
        val mutable private _i2 : int
    
        member t.I  = t._i
        member t.S  = t._s
        member t.I2 with get() = t._i2 * 2 and set(value) = t._i2 <- value * 2
        member t.Foo() = t._i * t._i
    
        [<ReflectedDefinition>] new (x, y, z) = {_i = x; _s = y; _i2 = z}
    

    vs在new之前对reflectedDefinition属性发出此错误消息: “此属性对此语言元素无效”

    这很奇怪,因为例如,Tomas在他的f_web工具项目中也广泛地在构造函数上使用它。 现在是默认行为吗?(我试过VS2010 Beta2,我可以重新编写)。我看不到任何替代或可能的解决办法。

    同样,我不能将这个属性放在成员或属性前面(我不知道1.9.7.8之前的CTP是否可能)。如果我删除struct属性(但仍然不在ctors上),但我确实需要在struct(成员和ctors)上使用它们,那么它会起作用。

    谢谢

    1 回复  |  直到 15 年前
        1
  •  3
  •   Brian    15 年前

    这是一个bug,现在已经在我们的内部位中修复了;在下一个版本中,对构造函数的ReflectedDefinition将再次起作用。(请随时将此类问题发送到fsbugs@microsoft.com。)