没有定义对象的中缀表示法中的方法
Method in infix notation without defined object
我有以下 Scala 对象:
object myCls {
def main(args: Array[String]) = {
print getString()
}
def getString(): String = {
return "myString"
}
}
在线:
print getString()
我明白了:
Cannot resolve symbol getString
这个方法有什么问题?
如果您查看规范中 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
中定义的方法,它是隐式导入的,所以我们在 [=18= 之前没有 PrefixExpr
].
为了让它工作,我们需要显式通过Predef
:
调用print
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
我有以下 Scala 对象:
object myCls {
def main(args: Array[String]) = {
print getString()
}
def getString(): String = {
return "myString"
}
}
在线:
print getString()
我明白了:
Cannot resolve symbol getString
这个方法有什么问题?
如果您查看规范中 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
中定义的方法,它是隐式导入的,所以我们在 [=18= 之前没有 PrefixExpr
].
为了让它工作,我们需要显式通过Predef
:
print
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