我有一些Scala代码使用要升级到2.10的存在性类型,并且我注意到有关添加“import language.existentials”的警告,这使我认为应该有一种更好的方式来编写此代码。我的代码可以归结为:
class A {
private var values = Set.empty[(Class[_], String)]
def add(klass: Class[_], id: String) {
val key = (klass, id)
if (!values(key)) {
values += key
// More logic below..
}
}
我收到此警告:
[warn] test.scala:4 inferred existential type (Class[_$2], String) forSome { type _$2 }, which cannot be expressed by wildcards, should be enabled
[warn] by making the implicit value language.existentials visible.
[warn] This can be achieved by adding the import clause 'import language.existentials'
[warn] or by setting the compiler option -language:existentials.
[warn] See the Scala docs for value scala.language.existentials for a discussion
[warn] why the feature should be explicitly enabled.
[warn] val key = (klass, id)
有没有一种方法可以重写我的代码而不生成此警告(或要求导入),或者这是表达它的最惯用的方法?我从不问代码中任何地方的Class的类型参数。
最佳答案
警告是关于存在类型的推断的,这通常是不希望的。添加import语句,或使其明确:
val key: (Class[_], String) = (klass, id)
关于scala - 成语替换存在类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11022142/