gpt4 book ai didi

scala - 在 Scala 中,是否可以使用隐式来自动覆盖 toString?

转载 作者:行者123 更新时间:2023-12-04 05:26:10 25 4
gpt4 key购买 nike

在 Java 中,我会做类似的事情

class MyDate extends java.util.Date {
public String toString() { ... }
}

MyDate date = new MyDate

有点笨重。在 Scala 中,是否可以在仍然使用常规 java.util.Date 而不是 MyDate 的同时覆盖 toString。我有一个隐含的暗示,但很乐意使用任何技术

最佳答案

隐式转换只有在被转换的类型还没有具有给定签名的方法时才有效。因为一切都有toString ,不可能通过拉皮条来覆盖它。

您可能要做的是使用如下所示的类型类(类似于 scalaz.Show ):

trait Show[-A] {
def show(a : A): String
}

那么你可以使用 show无处不在而不是 toString .理想情况下,您想要的是制作 Show[Any]实例一个非常低优先级的隐式。
implicit val DateShow = new Show[Date] { def show(d : Date) = "whatever" }

trait LowPriorityShows {
implicit val AnyShow = new Show[Any] { def show(a : Any) = a.toString }
}

附言我不建议使用 scalaz.Show 的原因就是返回类型是 List[Char] ,这对于大多数用途来说是不切实际的

关于scala - 在 Scala 中,是否可以使用隐式来自动覆盖 toString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939956/

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