scala – 结构类型细化和类型相等
发布时间:2020-12-16 18:50:59 所属栏目:安全 来源:网络整理
导读:我偶然发现了Type.=:=在应用于类型再生时的令人费解的行为. 考虑: import reflect.runtime.universe._type T1 = AnyRef { def apply( name: String ): Unit def foo: String}type Base = { def apply( name: String ): Unit }type T2 = Base { def foo: St
我偶然发现了Type.=:=在应用于类型再生时的令人费解的行为.
考虑: import reflect.runtime.universe._ type T1 = AnyRef { def apply( name: String ): Unit def foo: String } type Base = { def apply( name: String ): Unit } type T2 = Base { def foo: String } 鉴于Base是类型细化的别名,我希望通过添加成员foo来进一步细化它 换句话说,我希望T1和T2表示完全相同的类型. 在大多数情况下,scalac似乎同意. def f( x: T1 ){} f( null: T2 ) // scalac does not complain here 反之亦然: def g( x: T2 ){} g( null: T1 ) // scalac is still happy 我也可以要求提供T1 =:= T2的证据并且编译也很好: implicitly[T1 =:= T2] 但是,使用scala反射我会得到完全不同的结果: scala> typeOf[T1] =:= typeOf[T2] res2: Boolean = false 那么这是一个scala反射错误(我猜是这样)或者是否有一个根本原因(否则为技术)为什么typeOf [T1] =:= typeOf [T2]会返回false? 解决方法
可悲的是,它似乎是这个错误:
https://issues.scala-lang.org/browse/SI-8177
从好的方面来看……看起来正在积极开展工作以解决它:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SOAP webserivce 和 RESTful webservice 对比
- JMS与WebService应用场景
- angularjs – .net核心MVC:X-SRF-TOKEN不被接受,400返回
- WebService-CXF简介
- angularjs – Angular的$watch的奇怪行为
- 位置 – AngularJS – 更新$route参数的最佳方式
- bash的多命令执行,shell脚本基础及grep系
- 一个angularjs指令可以要求自己吗?
- Advanced Programming in UNIX Environment Episode 11
- angular 2 ViewChild不起作用