gpt4 book ai didi

scala - 为什么 null.asInstanceOf[] 失败?

转载 作者:行者123 更新时间:2023-12-01 05:25:03 25 4
gpt4 key购买 nike

null.asInstanceOf[<some CPS annotated type>]有什么合乎逻辑的原因吗?无法编译?

有关上下文,请参阅 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,B,C]预期由 A=>B 类型的延续 k 使用最终返回 C 类型的结果.

在我上面的例子中 "got " + f[Object, String] ,延续插件进一步组成了微不足道的 null值与 (x:Object) => "got " + x功能。

转到 context of the question ,我看不出来 Defaultable[T]可以代表 T@cps[U]因为它只有一个类型参数。但是如果你增强 Defaultable :
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,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

注意:我必须让特征使用 def而不是 val否则它不会编译。我也尝试实现一个 A@cpsParam[B,C]但不能。

关于scala - 为什么 null.asInstanceOf[<some CPS annotated type>] 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com