我想实现最简单的typeclass示例。
我来了:我的typeclass只是常规的scala特性
scala> trait Show[A] { def show(a: A) : String }
defined trait Show
这是我的类型类型为Int的实例
scala> implicit val IntShow = new Show[Int] { def show(i: Int) = s"'$i' is an int" }
IntShow: Show[Int] = $anon$1@14459d53
这是使用我的typeclass的客户端代码
scala> def f[A](a:A)(implicit s : Show[A]) = println(s.show(a))
f: [A](a: A)(implicit s: Show[A])Unit
叫它吧
scala> f(1)
'1' is an int
会更简单吗?
当然-您可以删除该方法。
scala> trait Show[A]
defined trait Show
scala> implicit object IntShow extends Show[Int]
defined object IntShow
您还可以通过使用上下文绑定而不是隐式参数来稍微清理用法代码。
scala> def f[A : Show](a: A) = a
f: [A](a: A)(implicit evidence$1: Show[A])A
示例调用(以证明此类型类至少具有某些作用):
scala> f(3)
res0: Int = 3
scala> f("3")
<console>:11: error: could not find implicit value for
evidence parameter of type Show[String]
f("3")
^
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句