[英]Object Initialization with an initializer block
昨天我正在閱讀一篇名為: Scala Experience如何改進我們的Java開發的論文 。
在對象初始化部分,它說:
用於實例化對象的慣用Scala技術(不通過構造函數參數公開所有相關參數)是創建一個帶有初始化塊的匿名子類,該塊調用其他語句[Odersky et al。]:
我一直在做一些測試:
class B {
var x1: String = "B"
def setText(text: String) {
x1 = text
}
override def toString = x1
}
我真的不明白為什么我能這樣做:
scala> new B{setText("new Text")}
res23: B = new Text
但我做不到:
scala> new B{ setText "new Text" }
<console>:1: error: ';' expected but string literal found.
new B{ setText "new Text" }
^
這與初始化塊沒有多大關系。 這只是含糖的語法
a b
手段
a.b
並不是
a(b)
或者在一般情況下
obj meth arg
是糖
obj.meth(arg)
arg
是可選的。
如果要在沒有括號的情況下指定它,則必須在方法之前編寫接收對象:
new B { this setText "new Text" }
無論出於何種原因,如果要保存字符,可以添加自我類型別名:
new B { o =>
o setText "new Text"
o setTitle "a Title"
o setSomeOtherArgument someArg
}
“操作符號”需要明確的接收者。 例如:
print("hello");
會工作,但是:
print "hello"
慣於。
這將是有效的,並打印"hello"
Predef print "hello"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.