将属性添加到类型而不是类型实例的隐式转换

2024-01-10

我正在阅读一些较旧的 Scala 帖子,以更好地理解类型类,然后我运行了 穿过this one https://stackoverflow.com/questions/8524878/implicit-conversion-vs-type-class这看起来很有用,但这个例子似乎已经过时了。

有人可以帮我找出正确的方法来实现菲利普的意图吗?这是代码

trait Default[T] { def value : T }

implicit object DefaultInt extends Default[Int] {
  def value = 42
}

implicit def listsHaveDefault[T : Default] = new Default[List[T]] {
  def value = implicitly[Default[T]].value :: Nil
}

default[List[List[Int]]]

当复制/粘贴并在 REPL 中运行时,我得到这个>

    scala> default[List[List[Int]]]
    <console>:18: error: not found: value default
                  default[List[List[Int]]]
                  ^

这与 Scala 版本无关。如果你读过@Philippe的回答 https://stackoverflow.com/a/8526452/2988,你会注意到default方法根本没有在任何地方定义。那不会工作在any斯卡拉版本。

它应该看起来像这样:

def default[T: Default] = implicitly[Default[T]].value
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将属性添加到类型而不是类型实例的隐式转换 的相关文章

随机推荐