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

scala – 集合如何使用元素类型的隐式转换?

发布时间:2020-12-16 18:14:08 所属栏目:安全 来源:网络整理
导读:在 this question工作时,我提出了以下问题.考虑两种方法定义: def foo[T : Ordered[T]](s : Seq[T]) = s.sorteddef foo[T % Ordered[T]](s : Seq[T]) = s.sorted 第一个编译,第二个编译.编译器没有发现它可以使用断言的隐式转换来获取Ordering.如果我们帮助
在 this question工作时,我提出了以下问题.考虑两种方法定义:

def foo[T <: Ordered[T]](s : Seq[T]) = s.sorted

def foo[T <% Ordered[T]](s : Seq[T]) = s.sorted

第一个编译,第二个编译.编译器没有发现它可以使用断言的隐式转换来获取Ordering.如果我们帮助了一点,它的工作原理:

def foo[T <% Ordered[T]](s : Seq[T]) = s.sortWith(_<=_)

在编译匿名函数时,编译器将隐式转换应用于find方法< =,一切都很好. 我没有其他示例,但可以想象类似的问题会发生在需要元素具有某些属性的集合上的其他函数中,如果这些只能通过转换来声明. 编译器是否有这种限制的特殊原因?有没有解决此类问题的一般方法? (这里似乎很容易.)是否有解决方法,例如另一个隐式转换,将Key [T]上的属性转换为T? (注意,如果T的具体值最终具有属性,那么最后的想法可能会有问题;然后我们会得到一个模糊的情况).

解决方法

scala> implicit def ordering[T <% Ordered[T]] = new Ordering[T]{def compare(x: T,y: T) = x compare y}
ordering: [T](implicit evidence$1: (T) => Ordered[T])java.lang.Object with Ordering[T]

scala> def foo[T <% Ordered[T]](s : Seq[T]) = s.sorted
foo: [T](s: Seq[T])(implicit evidence$1: (T) => Ordered[T])Seq[T]

(编辑:李大同)

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

    推荐文章
      热点阅读