【问题标题】:Type restricting trait methods depending on instance class类型限制特征方法取决于实例类
【发布时间】:2016-04-17 17:43:35
【问题描述】:

是否可以根据扩展类将 trait 中定义的方法限制为某种类型?例如:

trait Score extends Ordered[Score] {

    val reducedValue: Float // must be implemented by extending classes

    def compare (that: Score): Int = this.reducedValue.compare(that.reducedValue)
}

case class MarksScore (set: Boolean) extends Score {

    val reducedValue = if (this.set) 1.0f else 0.0f
}

case class RankingScore (rank: Float) extends Score {

    val reducedValue = this.rank
}

这样MarksScore(true)RankingScore(5) 相当,这很好,但毫无意义。所以我想将compare 限制为仅对应类的对象,而不是Score 的所有实现者。

【问题讨论】:

    标签: scala types traits


    【解决方案1】:

    这方面的东西感觉不对,但它达到了我的要求:

    trait Score[T <: Score[T]] extends Ordered[T] {
    
        val reducedValue: Float
    
        def compare (that: T): Int = this.reducedValue.compare(that.reducedValue)
    }
    
    
    case class MarksScore (set: Boolean) extends Score[MarksScore] {
    
        val reducedValue = if (this.set) 1.0f else 0.0f
    }
    
    
    case class RankingScore (rank: Float) extends Score[RankingScore] {
    
        val reducedValue = this.rank
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多