我有一个与数字相关的复杂类,我编写了以下代码:
override def toString: String = toString()
def toString(precision: Int = 2, showImag:Boolean = true): String = ???
第二种方法的实施并不重要。这样做的问题是toString()
会调用toString
并无休止地递归。我可以用toString()
替换toString(2)
,但我认为这很难看,因为2已经隐含了。有没有办法在不指定参数或重命名函数的情况下使用第二个函数?
<小时/> 的修改:
由于答案和评论显示不可能(阅读他们的解释原因)。我意识到解决这个问题的方法是创建一个具有不同名称的私有方法,该方法由另外两个公共方法调用,并包含实际的实现,如下所示:
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 = ???
你可以说这是更多的代码行,你可以说它确实没有给出一个已经默认的参数。这两种方法都有效,我认为进一步讨论哪种方法更好,因为它们都有其优点和缺点是主观的。
答案 0 :(得分:2)
有没有办法在不指定参数或重命名函数的情况下使用第二个函数?
无论您做什么,toString()
都会调用从toString()
继承的Any
,因为这是最具体的匹配方法。