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

Chr*_*ord 2 scala implicit typeclass

我正在阅读一些较旧的Scala帖子以更好地理解类型类,我遇到了一个似乎非常有用的,但这个例子似乎已经过时了.

有人可以帮我找出正确的方法来做Phillipe的意图吗?这是代码

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]]]
Run Code Online (Sandbox Code Playgroud)

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

    scala> default[List[List[Int]]]
    <console>:18: error: not found: value default
                  default[List[List[Int]]]
                  ^
Run Code Online (Sandbox Code Playgroud)

Jör*_*tag 5

这与Scala版本无关.如果您阅读@ Philippe的答案,您会注意到该default方法并未在任何地方定义.这在任何 Scala版本中都不起作用.

它应该看起来像这样:

def default[T: Default] = implicitly[Default[T]].value
Run Code Online (Sandbox Code Playgroud)