我对Lift Cookbook for AJAX Forms感到困惑,我遇到了以下对象声明:
object EchoForm extends {
这令人困惑,所以我试了一下,编译得很好。我的Eclipse IDE似乎并没有表明任何其他功能是继承的,但我想我不相信只是“闲逛”的关键字。这个'裸'extends
做了什么,还是解析为'特别延伸'?
答案 0 :(得分:11)
这不是早期的对象初始化部分!请参阅this answer。
Parent
有should be early object initialization
,但在本书的代码示例中没有父母:
object EchoForm extends {
def render = {
...
}
} // no parents here!
旧答案(在@ som-snytt提到错误之前):
它是它可能(与父母一起)是一个早期的对象初始化部分。看一下这个例子:
trait Test {
val i: Int
val j = i + 1
}
错误创建实例:
object TestObj extends Test { val i = 1 }
TestObj.j
// Int = 1
j
在i
之前初始化,但j
取决于i
。
正确创作:
object TestObj extends { val i = 1 } with Test
TestObj.j
// 2
早期对象初始化部分允许在继承特征的所有字段之前初始化字段。
答案 1 :(得分:5)
这刚刚出现在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
}
}
答案 2 :(得分:2)
这个'裸'扩展是做任何事情,还是解析为'特别延伸'?
它会在单词extends
之后立即扩展'内联'匿名类:
object EchoForm extends <definition of anonymous class here - within brackets, optionally followed by `with` clauses for trait mixins>