是否有任何逻辑上的原因为null.asInstanceOf [<某些cps注释类型>]无法编译?
有关上下文,请参阅this github issue thread.
解决方法
我想知道scala 2.9版本是否正在做正确的事情,即使它编译(我会尝试当我有机会).无论如何,在2.10.0中这个编译和工作:
import scala.util.continuations._ object Nullcps extends App { def f[A,C] = shiftUnit[A,C,C](null.asInstanceOf[A]) println(reset{"got " + f[Object,String]}) // prints: got null println(reset{"got " + f[Int,String]}) // got 0 println(reset{"got " + f[Boolean,String]}) // got false }
shitUnit [A,B,C]是来自continuations package的库方法,它使用类型A的值来创建一个简单的ControlContext [A,C],期望由A =>类型的继续k使用返回类型C的结果
在上面的例子“got”f [Object,String]中,continuation插件进一步用(x:Object)=>组成了普通的null值. “得到”x功能.
继续到context of the question,我看不出Defaultable [T]如何代表T @ cps [U],因为它只有一个类型参数.但是如果你增强了违约:
import scala.util.continuations._ trait Defcps[A,C] { def default: A@cps[C] } object Nullcps extends App { implicit def defaultcps[A,C] = new Defcps[A,C] { def default: A@cps[C] = shiftUnit[A,C](null.asInstanceOf[A]) } println(reset{"got " + implicitly[Defcps[Object,String]].default}) println(reset{"got " + implicitly[Defcps[Int,String]].default}) println(reset{"got " + implicitly[Defcps[Boolean,String]].default}) } // prints got null // got 0 // got false
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。