加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

class – Scala REPL“error:value>不是类型参数T的成员”

发布时间:2020-12-16 10:04:04 所属栏目:安全 来源:网络整理
导读:这是我的档案 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 Non
这是我的档案

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
}

我正在使用“: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,right)
                      ^
<console>:31: error: value > is not a member of type parameter T
                else if (x > elem) new NonEmpty(elem,right incl x)

我确定这个文件是正确的,因为它来自类示例,并且当教授使用时它在课堂上工作…

有帮助吗?

解决方法

你得到那个错误,因为不是每个类型T都有>,<等定义. 您可能想要的是T被订购或隐式转换为Ordered的东西,因此定义了所有这些. 这应该修复错误消息:

class NonEmpty[T <% Ordered[T]](elem: 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,right)
        else if (x > elem) new NonEmpty(elem,right incl x)
        else this

    def union(that: Set[T]): Set[T] =
        ((left union right) union that) incl elem
}

T<%S(视图边界)表示类型T必须可转换为S,因此它必须是S的子类型或者已定义隐式转换. this queston的接受者答案更详细地解释了它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读