【发布时间】:2012-06-02 14:36:33
【问题描述】:
是否可以从以下代码中删除某些类型:
import util.continuations._
object TrackingTest extends App {
implicit def trackable(x: Int) = new {
def tracked[R] = shift { cf: (Int => (R, Set[Int])) =>
cf(x) match {
case (r, ints) => (r, ints + x)
}
}
}
def track[R](body: => R @cpsParam[(R, Set[Int]), (R, Set[Int])]) = reset {
(body, Set[Int]())
}
val result = track(7.tracked[Int] + 35.tracked[Int])
assert(result == (42, Set(7, 35)))
val differentTypes = track(9.tracked[String].toString)
assert(differentTypes == ("9", Set(9)))
}
track 函数跟踪对Int 实例(例如7.tracked)的tracked 调用。
是否可以在 tracked 隐式上推断类型参数,因此可以编译以下内容:
track(7.tracked + 35.tracked)
【问题讨论】:
标签: scala type-inference continuations