【发布时间】:2011-10-13 19:23:20
【问题描述】:
[B >: A] 在 Scala 中是什么意思?又有什么影响?
示例参考:http://www.scala-lang.org/node/129
class Stack[+A] {
def push[B >: A](elem: B): Stack[B] = new Stack[B] {
override def top: B = elem
override def pop: Stack[B] = Stack.this
override def toString() = elem.toString() + " " + Stack.this.toString()
}
def top: A = error("no element on stack")
def pop: Stack[A] = error("no element on stack")
override def toString() = ""
}
object VariancesTest extends Application {
var s: Stack[Any] = new Stack().push("hello");
s = s.push(new Object())
s = s.push(7)
println(s)
}
【问题讨论】:
-
从上下文来看,它看起来像是“允许 B 表示一个也可由 A 表示的类”,但这只是猜测。
-
在 REPL 上试试这个:
val s1 = new Stack().push("hello"); val s2 = s1.push(new Object()); val s3 = s2.push(7)-- s1、s2 和 s3 有何不同? (这隐藏在给 s 的Stack[Any]类型后面;记住 Any 是 Scala 中最顶层的类型,而不是 Object。) -
@macias 太糟糕了,当我在发布之前搜索类似问题时完全没有出现。我投票保留这些好答案..
-
@pyrony,标记为重复并不会删除答案,但构建重复网络实际上有助于查看问题的全局(以及所有答案)。我对你没有点击那篇文章并不感到惊讶,主题完全不同:-)。