下面的代码会在工作表中引发编译错误
def joiner(strings:List[String], separator:String):String = strings.mkString(separator)
def joiner(strings:List[String]):String = joiner(strings, " ")
joiner(List("sdsdfsd", "sdsd"))
错误:
Error:(12, 120) too many arguments for method joiner: (strings: List[String])String
println("joiner: " + MacroPrinter211.printGeneric({import inst$A$A._ ;def joiner(strings:List[String]):String = joiner(strings, " ") }).replace("inst$A$A.", ""))
^
我有重载的木匠方法。为什么它会给错误提供太多的论据?
答案 0 :(得分:6)
如果将代码放在类或对象中,则代码可以正常工作,因为类或对象可以在scala中具有重载方法。
但是如果你在REPL中编写代码 - 这些不是方法,而是函数。功能不能超载。所以你应该将它们放在一个对象或类中,或者使用@StuartMcvean
建议的默认参数更新由于@Travis正确地纠正了我的回答,我在这里发生的事情的原因是错误的。看起来像REPL(和工作表)也没有正确处理它,因为它处理方法的机制。
据我所知(我希望这次我更正),这是因为REPL需要将一个方法更改为另一个方法,因为REPL允许您定义具有不兼容签名的方法,替换旧方法(例如,只有返回值不同的方法)
如果您尝试使用:paste
粘贴代码(不确定工作表的等效内容) - 它会正确处理
答案 1 :(得分:3)
在scala中,您可以提供默认参数。这将允许您执行以下操作:
def joiner(strings:List[String], separator:String = " "): String =
strings.mkString(separator)
joiner(List("sdsdfsd", "sdsd"))