没有定义对象的中缀表示法中的方法

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