代码之家  ›  专栏  ›  技术社区  ›  Thomas Jung

如何定义循环类型定义?

  •  6
  • Thomas Jung  · 技术社区  · 16 年前

    这不是有效的类型定义:

    scala>  type Addable = { def +(subject: Addable) }
    <console>:4: error: illegal cyclic reference involving type Addable
            type Addable = { def +(subject: Addable) }
    

    这可以用scala表示吗?

    3 回复  |  直到 16 年前
        1
  •  5
  •   Walter Chang    16 年前

    不,不能。

    Scala语言规范2.7版第40页:

    但是,如果 类型别名递归地引用 定义类型构造函数本身。那个 那是什么类型的 在类型别名中 类型 t[tps]=t不能直接或间接引用名称 T .

        2
  •  1
  •   Yardena    16 年前

    这是我在图书馆里写的,嗯:

      trait Addable {
        type AddableType <: Addable
        def + (subject: AddableType): AddableType
      }
      trait Rational extends Addable {
        type AddableType = Rational
        override def + (subject: Rational): Rational 
      }
    
    推荐文章