方法调用间距不一致我有一个的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