scala - 重写 scala 中的 toString 并使用默认参数创建第二个 toString 方法

标签 scala overriding tostring default-parameters

我有一个与复数相关的类,我为其编写了以下代码:

override def toString: String = toString()

def toString(precision: Int = 2, showImag:Boolean = true): String = ???

第二种方法的实现并不重要。这样做的问题是 toString() 将调用 toString 并且会无限递归。我可以用 toString(2) 替换 toString(),但我认为这很丑陋,因为 2 已经隐含了。有没有办法在不指定参数或重命名函数的情况下使用第二个函数?


编辑:

正如答案和评论表明这是不可能的(阅读他们的解释)。我意识到解决这个问题的方法是创建一个具有不同名称的私有(private)方法,该方法由其他两个公共(public)方法调用并包含实际的实现,如下所示:

override def toString: String = toStringImpl(2, true)

def toString(precision: Int = 2, showImag:Boolean = true): String = toStringImpl(precision, showImag)

private def toStringImpl(precision: Int, showImag:Boolean): String = ???

您可以说这是更多行代码,并且您可以说它确实没有给出已经默认的参数。这两种方法都有效,我认为进一步讨论哪种方法更好是主观的,因为两者都有各自的优点和缺点。

最佳答案

Is there a way to use the second function without specifying parameters or renaming the function?

无论你做什么,toString()都会调用从Any继承的toString(),因为它是最具体的匹配方法。

关于scala - 重写 scala 中的 toString 并使用默认参数创建第二个 toString 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802684/

相关文章:

java - Java LinkedStack 实现中 ToString 方法的问题

scala - Spark : Flatten simple multi-column DataFrame

scala - 在 Play 中通过 "activator run"运行时获取要编译的资源

scala - Slick 3.0 Insert 然后获取 Auto Increment Value

C++:使用模板时未覆盖函数

javascript - 比较 JavaScript 中的函数与 .toString()

scala - 使用 akka-http 执行 OAuth2 身份验证的最佳方法是什么?

java - 需要在从另一个类扩展的类中设置一个变量。或者覆盖类型

html - 覆盖 iframe 宽度的 CSS 属性

c# - 动态更改 Winforms ComboBox 中项目的文本