方法調用間距不一致我有一個的getter/setter類:在斯卡拉
class Person {
private var _age = 0
//getter
def age = _age
//setter
def age_=(value: Int): Unit = _age = value
def echo(x: String): Unit = println(x)
}
我做了一些測試:
val p = new Person()
//invoke age setter method
p.age =(2)
p age = 11
p.age = 8-4
// invoke echo method
p.echo("Hello")
p echo "Scala"
p.echo "Johnson" //compile error here
所以我就在編譯錯誤:
p.echo "Johnson"
帶有錯誤訊息:
Error:(84, 16) ';' expected but string literal found.
p.echo "Johnson" //compile error here (why scala?)
^
爲什麼p.age = 8-4
工作正常,但我得到了p.echo "Johnson"
錯誤?是因爲_=
在def age_=
?
UPDATE:
我做了一個實驗:
class Person {
...
def echo = "Ginger"
def echo_=(x: String): Unit = println(x)
}
再變echo
方法調用:
p.echo= ("Hello")
p echo= "Scala"
p.echo= "Johnson"
他們工作得很好。但是如果我刪除了def echo = "Ginger"
,我會收到編譯錯誤。所以基於這個觀察,我得出了結論:setter方法的「魔術」取決於getter方法。如果沒有getter方法定義,魔法消失。
但這意味着我不能創建一個setter(只寫)方法??
關於'_'的回答:需要在語法上創建一個標識符。每個符號(非alnum字符)應由至少一個「_」與字母數字字符分隔。 –
@GáborBakos:謝謝。但是似乎下劃線只能使用一次,因爲當我嘗試這個時:'val x _ = _ x = 20',我得到了編譯錯誤。我還有一些關於它的問題,我想我最好爲此做一個單獨的問題。 – null