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

Scala:如何制定泛型类的参数类型的要求?

发布时间:2020-12-16 09:05:07 所属栏目:安全 来源:网络整理
导读:我正在创建一些参数化类C [T],我想对类型T的特性做出一些要求,以便能够成为我的类的参数.如果我只想说T继承自traits或class(就像我们使用Ordering那样),那就简单了.但我希望它也能实现一些功能. 例如,我已经看到许多预定义类型实现MinValue和MaxValue,我希望
我正在创建一些参数化类C [T],我想对类型T的特性做出一些要求,以便能够成为我的类的参数.如果我只想说T继承自traits或class(就像我们使用Ordering那样),那就简单了.但我希望它也能实现一些功能.

例如,我已经看到许多预定义类型实现MinValue和MaxValue,我希望我的类型T也实现它们.我收到了一些建议来定义隐式函数.但我不希望所有用户在已经实现的情况下被迫为这些实现此功能.我也可以在我的代码中实现它们,但它似乎只是一个糟糕的快速修复.

例如,在定义堆时,我想允许用户构造一个空堆.在这些情况下,我想用T类型可能具有的最小值来实现值.显然这段代码不起作用.

class Heap[T](val value:T,val heaps:List[Heap[T]]){
    def this()=this(T.MinValue,List())
}

我也很想收到关于真正好的在线Scala 2.8参考资料的一些建议.

解决方法

一堆东??西,由于共享一些方法(尽管具有不同的返回类型)而松散相关.当然听起来像ad-hoc多态!

滚动类型类…

class HasMinMax[T] {
  def maxValue: T
  def minValue: T
}

implicit object IntHasMinMax extends HasMinMax[Int] {
  def maxValue = Int.MaxValue
  def minValue = Int.MinValue
}

implicit object DoubleHasMinMax extends HasMinMax[Double] {
  def maxValue = Double.MaxValue
  def minValue = Double.MinValue
}

// etc

class C[T : HasMinMax](param : T) {
  val bounds = implicitly[HasMinMax[T]]
  // now use bounds.minValue or bounds.minValue as required
}

UPDATE

[T:HasMinMax]表示法是一个上下文绑定,并且是语法糖:

class C[T](param : T)(implicit bounds: HasMinMax[T]) {
  // now use bounds.minValue or bounds.minValue as required
}

(编辑:李大同)

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

    推荐文章
      热点阅读