下面的代码会在工作表中引发编译错误
def joiner(strings:List[String], separator:String):String = strings.mkString(separator)
def joiner(strings:List[String]):String = joiner(strings, " ")
joiner(List("sdsdfsd", "sdsd"))
Run Code Online (Sandbox Code Playgroud)
错误:
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.", ""))
^
Run Code Online (Sandbox Code Playgroud)
我有重载的木匠方法.为什么它会给错误提供太多的论据?
如果将代码放在类或对象中,则代码可以正常工作,因为类或对象可以在scala中具有重载方法.
但是如果你在REPL中编写代码 - 这些不是方法,而是函数.功能不能超载.所以你应该把它们放在一个对象或类中,或者使用@StuartMcvean建议的默认参数
更新为@Travis正确地纠正了我的回答我错了这里发生的事情的原因.看起来像REPL(和工作表)也没有正确处理它,因为它处理方法的机制.
据我所知(我希望这次是正确的),这是因为REPL需要将一个方法更改为另一个方法,因为REPL允许您定义具有不兼容签名的方法,替换旧方法(例如,不同的方法)只有返回值)
如果您尝试粘贴代码:paste(不确定工作表的等效内容) - 它会正确处理