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

在Scala中定义类型安全可选方法的最佳方法是什么?

发布时间:2020-12-16 18:40:31 所属栏目:安全 来源:网络整理
导读:可选方法是在类泛型具有特定类型时可以应用的方法. 例子: list.unzip //works only if this is collection of pairslist.sum //works only if this collection of numbers 目前我想要实现回归方法,其具有与解压缩相同的约束(即2d点的集合),但我不知道如何确
可选方法是在类泛型具有特定类型时可以应用的方法.
例子:

list.unzip //works only if this is collection of pairs
list.sum //works only if this collection of numbers

目前我想要实现回归方法,其具有与解压缩相同的约束(即2d点的集合),但我不知道如何确保该方法(隐含asPair:A =>(A1,A2)exsist和哪里最好定义此类转换的位置.

解决方法

以下是TraversableOnce.toMap所做的事情,以确保仅在对的集合上调用它.

def toMap[T,U](implicit ev: A <:< (T,U)): immutable.Map[T,U] = {
  val b = immutable.Map.newBuilder[T,U]
  for (x <- self)
    b += x
  b.result
}

但是,如果您希望在现有集合类中添加类似的方法,则可以使其更加简单:

class EnhancedIterable[T,U](x: Iterable[(T,U)]) { // CanBuildFrom omitted for brevity
  def swapAll() = x.map(_.swap)
}
implicit def enhanceIterable[T,U)]) = new EnhancedIterable(x)

List((1,2),(3,4),(5,6)).swapAll // List((2,1),(4,3),(6,5))
List(1,2,3).swapAll // error: value swapAll is not a member of List[Int]

(编辑:李大同)

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

    推荐文章
      热点阅读