Scala类型类

3

我正在尝试实现简单的类型类模式。它应该类似于scalaz的类型类。不幸的是,我无法让它工作。我有一个特质Str

trait Str[T] {
  def str(t: T): String
}

object Str {
  def apply[T](implicit instance: Str[T]) : Str[T] = instance
}

在我的和隐式实例中。
object Temp extends App {

  implicit val intStr = new Str[Int] {
    def str(i: Int) = i.toString
  }

  1.str //error: value str is not a member of Int

}

我很感激任何关于IT技术的见解。


难道不应该是 Str(1).str 吗?你没有定义一个 implicit class,只是一个带有 applyobject - Gábor Bakos
1个回答

8
现在你能做的一切是:
Str[Int].str(1)

如果要使用 1.str,您需要引入隐式转换。

例如,您可以使用以下方法:

implicit class StrOps[A](val self: A) extends AnyVal {
    def str(implicit S: Str[A]) = S.str(self)
}

这将会产生:

scala> 1.str
res2: String = 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接