let rect = new Rectangle(x, y, sprite.Width, sprite.Height)
rect.X <- 888
Run Code Online (Sandbox Code Playgroud)
第二行在F#中失败,但在C#中,赋值有效.我不知道为什么.
Rectangle是一个结构而不是一个类.如果您使用以下值标记值,则可以按预期运行该行mutable:
let mutable rect = new Rectangle(10, 21, 10, 21)
rect.X <- 888
Run Code Online (Sandbox Code Playgroud)
这实际上非常有趣,因为与C#相比,F#使结构的值类型语义更加明显.
rect.X <- 888并没有真正改变字段,而是rect使用修改了X字段的结构的新值进行更新.所以你可以想象它确实相当于rect <- { rect with X = 888 }.那时,很清楚为什么编译器想要看到mutable那里.
我想知道为什么F#设计者没有禁止结构的赋值语法,并且使用类似于记录语法的东西.可能他们不想让它与C#相比有太大的不同.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |