mor*_*ina 4 scala compiler-errors class
这是我的档案
trait Set[T] {
def contains(x: T): Boolean
def incl(x: T): Set[T]
def union(that: Set[T]): Set[T]
}
class Empty[T] extends Set[T] {
override def toString = "."
def contains(x: T): Boolean = false
def incl(x: T): Set[T] = new NonEmpty[T](x, new Empty[T], new Empty[T])
def union(that: Set[T]): Set[T] = that
}
class NonEmpty[T](elem: T, left: Set[T], right: Set[T]) extends Set[T] {
override def toString = "{" + left + elem + right + "}"
def contains(x: T): Boolean =
if (x < elem) left contains x
else if (x > elem) right contains x
else true
def incl(x: T): Set[T] =
if (x < elem) new NonEmpty(elem, left incl x, right)
else if (x > elem) new NonEmpty(elem, left, right incl x)
else this
def union(that: Set[T]): Set[T] =
((left union right) union that) incl elem
}
Run Code Online (Sandbox Code Playgroud)
我正在使用":paste"方法,因为:加载不起作用.但是我收到以下错误
<console>:25: error: value < is not a member of type parameter T
if (x < elem) left contains x
^
<console>:26: error: value > is not a member of type parameter T
else if (x > elem) right contains x
^
<console>:30: error: value < is not a member of type parameter T
if (x < elem) new NonEmpty(elem, left incl x, right)
^
<console>:31: error: value > is not a member of type parameter T
else if (x > elem) new NonEmpty(elem, left, right incl x)
Run Code Online (Sandbox Code Playgroud)
我确定这个文件是正确的,因为它来自类示例,并且当教授使用时它在课堂上工作...
有帮助吗?
你得到这个错误,因为不是每个类型T都有>,<等定义.
您可能想要的是T成为Ordered或可隐式地转换为某些内容Ordered,因此定义了所有这些内容.
这应该修复错误消息:
class NonEmpty[T <% Ordered[T]](elem: T, left: Set[T], right: Set[T]) extends Set[T] {
override def toString = "{" + left + elem + right + "}"
def contains(x: T): Boolean =
if (x < elem) left contains x
else if (x > elem) right contains x
else true
def incl(x: T): Set[T] =
if (x < elem) new NonEmpty(elem, left incl x, right)
else if (x > elem) new NonEmpty(elem, left, right incl x)
else this
def union(that: Set[T]): Set[T] =
((left union right) union that) incl elem
}
Run Code Online (Sandbox Code Playgroud)
T <% S(视图边界)表示该类型T必须可转换为S,因此它必须是子类型S或已定义隐式转换.
这个问题的接受者答案更详细地解释了它.
| 归档时间: |
|
| 查看次数: |
4097 次 |
| 最近记录: |