我在解决AJAX Forms的Lift Cookbook时感到困惑,我遇到了以下对象声明:
object EchoForm extends {
Run Code Online (Sandbox Code Playgroud)
这很令人困惑,所以我试了一下,编译得很好.我的Eclipse IDE似乎并没有表明任何其他功能是继承的,但我想我不相信只是"闲逛"的关键字.这个"赤身裸体" extends做了什么,还是解析为"没有特别延伸"?
sen*_*nia 11
它不是早期的对象初始化部分!看到这个答案.
这里应该是 Parent对early object initialization的,但在本书的代码示例中没有家长:
object EchoForm extends {
def render = {
...
}
} // no parents here!
Run Code Online (Sandbox Code Playgroud)
老答案(在@ som-snytt之前提到它是错的):
这可能是(与父母一起)早期的对象初始化部分.看看这个例子:
trait Test {
val i: Int
val j = i + 1
}
Run Code Online (Sandbox Code Playgroud)
错误创建实例:
object TestObj extends Test { val i = 1 }
TestObj.j
// Int = 1
Run Code Online (Sandbox Code Playgroud)
j之前已初始化i,但j取决于i.
正确的创作:
object TestObj extends { val i = 1 } with Test
TestObj.j
// 2
Run Code Online (Sandbox Code Playgroud)
早期对象初始化部分允许在继承的特征的所有字段之前初始化字段.
这恰好出现在ML上:
https://groups.google.com/forum/#!topic/scala-user/_qMoODIBQtE
然后是手指发痒以弃用语法:
https://groups.google.com/d/msg/scala-internals/8zlyUH3S7sU/0EFiLSx9B68J
以下是语法的链接:
https://github.com/scala/scala-dist/blob/2.10.x/documentation/src/reference/SyntaxSummary.tex#L272
基本上,object Foo { }是一样的object Foo extends { }.
脚注:有问题的片段是无用的:
object EchoForm extends {
def render = {
//snip
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |