我使用scala 2.10.0-snapshot日期(20120522)并具有以下Scala文件:
这个定义了类型类和基本的类型类实例:
package com.netgents.typeclass.hole
case class Rabbit
trait Hole[A] {
def findHole(x: A): String
}
object Hole {
def apply[A: Hole] = implicitly[Hole[A]]
implicit val rabbitHoleInHole = new Hole[Rabbit] {
def findHole(x: Rabbit) = "Rabbit found the hole in Hole companion object"
}
}
Run Code Online (Sandbox Code Playgroud)
这是包对象:
package com.netgents.typeclass
package object hole {
def findHole[A: Hole](x: A) = Hole[A].findHole(x)
implicit val rabbitHoleInHolePackage = new Hole[Rabbit] {
def findHole(x: Rabbit) = "Rabbit found the hole in Hole package object"
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试: …
我是从scala-user交叉发布的:
我有以下内容:
object XmlTest {
import com.codecommit.antixml._
implicit def toPicker(nodes: Group[Node]): Picker = new Picker(nodes)
class Picker(nodes: Group[Node]) {
def pick[A <: Node : ClassManifest]: Group[A] = nodes collect {
case a if implicitly[ClassManifest[A]].erasure.isInstance(a) => a.asInstanceOf[A]
}
}
def testCollect(elems: Group[Elem]) {
println("size before collect = " + elems.size)
val es = elems collect {
case e if e.name == "c" => println("element name is " + e.name); e
}
println("size after collect = " + es.size)
}
def main(args: …Run Code Online (Sandbox Code Playgroud)