gpt4 book ai didi

scala - Scala 重载方法有什么问题

转载 作者:行者123 更新时间:2023-12-04 22:58:18 25 4
gpt4 key购买 nike

下面的代码在工作表中引发编译错误

 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.", ""))
^

我重载了joiner方法。为什么它会给出太多参数的错误?

最佳答案

如果将代码放在类或对象中,则代码可以正常工作,因为类或对象在 Scala 中可能具有重载方法。

但是如果你用 REPL 编写代码——这些不是方法,而是函数。并且函数不能重载。所以你应该把这些放在一个对象或类中,或者按照@StuartMcvean 的建议使用默认参数

更新 由于@Travis 正确纠正了我的回答,我对这里发生的事情的原因是错误的。由于处理方法的机制,REPL(以及工作表)似乎无法正确处理它。

据我了解(希望这次我是对的),这是因为 REPL 需要将一种方法更改为另一种方法,因为 REPL 允许您定义签名不兼容的方法,替换旧方法(例如不同的方法)仅通过返回值)

如果您尝试使用 :paste 粘贴您的代码(不确定工作表的等价物是什么) - 它处理正确

关于scala - Scala 重载方法有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com