【发布时间】:2015-02-07 17:07:07
【问题描述】:
我试图在 Scala 2.11 中编写一些简单的类型级编程示例。这是一个判断类型相等的函数:
def type_==[A, B](implicit ev: A =:= B = null) = ev != null
这里=:=是在前奏中定义的,但是为了我们的目的,即使是一个简单的定义比如
class =:=[A, B]
implicit def equalTypeInstance[A] = new =:=[A, A]
会的。可以肯定,可以做
type_==[Int, String] // false
type_==[Int, Int] // true
接下来,我将布尔值编码为类型 - 为简单起见,我避免定义任何操作
sealed trait Bool
trait True extends Bool
trait False extends Bool
我可以再次检查
type_==[True, True] // true
所以我想我可以通过这样做将Bool 转换为Boolean
def bool2boolean[A <: Bool] = type_==[A, True]
问题来了:
bool2boolean[True] // false
谁能解释原因?
【问题讨论】:
标签: scala types implicit type-level-computation