当没有句点和参数的链接方法调用时,Scala“不是”的成员

时间:2013-11-24 05:24:24

标签: scala

继续我的工作: Scala "does not take parameters" when chaining method calls without periods

鉴于已接受的答案,这次我想将参数传递给其中一个方法。

原始建议:

object and

class Greeter {
  def hi(a: and.type) = { print("hi"); this }
  def hello = { print("hello"); this }
}

new Greeter hi and hello

我的新代码:

object and

class Greeter {
  def hi(name: String) = { print("hi" + name); this }
  def hi(name: String, a: and.type): Greeter = hi(name)
  def hello = { print("hello"); this }
}

但是当我:new Greeter hi "Miguel" and

我得到:error: value and is not a member of Greeter

将括号和逗号括起来:new Greeter hi ("Miguel", and)

2 个答案:

答案 0 :(得分:1)

编译器并不总是能够推断出parantheses。我的规则很简单,如果它在没有它们的情况下爆炸,我会添加它们并继续前进。通常,我稍后会进一步学习该语言,然后以删除它们的方式(如果它们是DSL的一部分)清理我的代码。但是,我发现提前尝试这样做需要花费20倍才能找到答案。如果我刚刚接受了一些温和的瑕疵,可以更快地发布软件。

答案 1 :(得分:1)

在Scala中,参数列表周围必须始终有一个带有多个参数的圆括号。离开那些是不可能的。

new Greeter hi "Miguel" and被解释为(new Greeter).hi("Miguel").and,即它试图在Greeter对象上调用and方法。