我有以下Scala对象:
object myCls {
def main(args: Array[String]) = {
print getString()
}
def getString(): String = {
return "myString"
}
}
在线:
print getString()
我遇到了问题:
Cannot resolve symbol getString
这种方法有什么问题?
答案 0 :(得分:4)
如果你看一下规范中Infix Expression的定义,你会看到:
InfixExpr ::= PrefixExpr
| InfixExpr id [nl] InfixExpr
PrefixExpr ::= [`-' | `+' | `~' | `!'] SimpleExpr
SimpleExpr ::= `new' (ClassTemplate | TemplateBody)
| BlockExpr
| SimpleExpr1 [`_']
当Scala编译器查看infix notation的语法时,其形式为:
PrefixExpr
| InfixExpr id [nl] InfixExpr`
我们可以将其视为object -> method -> parameters (0 or 1)
在您发布的示例中,由于print
是Predef
中定义的方法(隐式导入),因此我们在PrefixExpr
之前没有[Identifier[NewLine]]
。
为了实现这一点,我们需要明确地通过print
调用Predef
:
scala> :pa
// Entering paste mode (ctrl-D to finish)
def getString(): String = {
"myString"
}
// Exiting paste mode, now interpreting.
getString: ()String
scala> print getString()
<console>:11: error: missing arguments for method print in object Predef;
follow this method with `_' if you want to treat it as a partially applied function
print getString()
^
scala> Predef print getString()
myString
scala>
由于getString
是arity-0,我们也可以删除它周围的括号:
scala> Predef print getString
myString