我试图写一小段scala代码来理解无括号的方法和postfixOps。
这是我的代码:
import scala.language.postfixOps
object Parentheses {
def main(args: Array[String]) {
val person = new Person("Tom", 10);
val tomAge = person getAge
println(tomAge)
}
class Person(val name: String, val age: Int) {
def getAge = {
age
}
}
}
然而,在编译时,我有一个问题说:
error: recursive value tomAge needs type
println(tomAge)
如果我将方法调用person getAge
替换为person.getAge
,程序将正常运行。
为什么person getAge
的函数调用失败?
答案 0 :(得分:6)
应谨慎使用后缀表示法 - 请参阅infix notation
和postfix notation
here部分。
此样式不安全,不应使用。因为分号是 可选,编译器将尝试将其视为中缀方法if 它可以,可能从下一行开始学习。
如果您将;
附加到val tomAge = person getAge
,您的代码将会生效(带有编译器警告)。
答案 1 :(得分:0)
def main(args: Array[String]) {
val person = new Person("Tom", 10);
val tomAge = person getAge; ///////////
println(tomAge)
}
您的代码无效,因为您需要添加“;”在中缀操作中!
我尝试了你的例子here并且工作得很好!
See this answer,接受的答案显示了另一个例子