继续我的工作: 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)
答案 0 :(得分:1)
编译器并不总是能够推断出parantheses。我的规则很简单,如果它在没有它们的情况下爆炸,我会添加它们并继续前进。通常,我稍后会进一步学习该语言,然后以删除它们的方式(如果它们是DSL的一部分)清理我的代码。但是,我发现提前尝试这样做需要花费20倍才能找到答案。如果我刚刚接受了一些温和的瑕疵,可以更快地发布软件。
答案 1 :(得分:1)
在Scala中,参数列表周围必须始终有一个带有多个参数的圆括号。离开那些是不可能的。
new Greeter hi "Miguel" and
被解释为(new Greeter).hi("Miguel").and
,即它试图在Greeter对象上调用and
方法。