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

标签 scala typeclass implicit

我正在阅读一些较旧的 Scala 帖子以更好地理解类型类,然后我跑了 跨this one这似乎很有用,但这个例子似乎已经过时了。

有人可以帮我找出正确的方法来实现 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]]]

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

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

最佳答案

这与 Scala 版本无关。如果你阅读 @Philippe's answer ,您会注意到 default 方法根本没有在任何地方定义。这不适用于任何 Scala 版本。

它应该看起来像这样:

def default[T: Default] = implicitly[Default[T]].value

关于scala - 将属性添加到类型而不是类型实例的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910923/

相关文章:

haskell - 我该如何解决这种类型类歧义?

sql-server - SQL Server 如何决定隐式日期时间转换的格式?

scala - scala 中的 "implictly"现在是否已弃用或至少不再需要?

java - 实现接口(interface)方法(没有显式实现该接口(interface))的类是否扩展了该特定接口(interface)?

scala - 如何在 Scala 中联合错误类型?

multithreading - 如何在 Gatling 中实现特定的线程数

haskell - Haskell 中的 Comonad 类型类是什么?

haskell - Haskell 的 Data.Typeable 是什么?

java - 线程 "main"org.apache.spark.SparkException : Task not serializable 中出现异常

用于 Scala 的 SQLite