通过
these
posts工作让我觉得我理解自我类型,至少在某种程度上.
所以我创建了一个按预期失败的示例:
scala> trait A { val v = "a" } defined trait A scala> trait B { this :A => ; var v = "" ; this.v = "b" } <console>:6: error: reassignment to val trait B { this :A => ; var v = "" ; this.v = "b" } ^
自我类型的“这个”阴影B的“这个” – 它看起来很奇怪,但有道理.
那么,给自我类型赋予不同的名称似乎是明智的.我做到了这一点并且相当惊讶:
scala> trait C { a :A => ; var v = "" ; this.v = "c" } <console>:6: error: reassignment to val trait C { a :A => ; var v = "" ; this.v = "c" } ^
它还在阴影中???
更改’local’变量的名称让事情编译,这是有道理的:
scala> trait D { a :A => ; var w = "" ; this.w = a.v } defined trait D
(并且可以选择使用自我类型名称来阐明要使用的“v”.)
好的.这意味着以下应该失败?
scala> trait E { this :A => ; var w = "" ; this.w = this.v } defined trait E
咦?这是这个?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。