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

Scala mapConserve用例

发布时间:2020-12-16 10:01:02 所属栏目:安全 来源:网络整理
导读:昨天我在SO: scala List map vs mapConserve发现了关于scala mapConserve的信息 我的问题是,有人想什么时候使用这种方法?提供的示例使用带有标识功能的mapConserve,我看不到它的用例… 编辑:在GitHub上快速搜索并找到了使用mapConserve的816个Scala代码块
昨天我在SO: scala List map vs mapConserve发现了关于scala mapConserve的信息

我的问题是,有人想什么时候使用这种方法?提供的示例使用带有标识功能的mapConserve,我看不到它的用例…

编辑:在GitHub上快速搜索并找到了使用mapConserve的816个Scala代码块.其中许多(至少3页)是这段代码:

def checkStackOverflow() = {  
    var xs: List[String] = Nil
    for (i <- 0 until 250000)
        xs = "X" :: xs

    val lowers = xs.mapConserve(_.toLowerCase)
    assert(xs.mapConserve(x => x) eq xs)
  }

解决方法

这个问题引起了我的兴趣,所以我浏览了Scala代码库并查看了mapConserves()的实际用途.

在一些地方弹出的是:如果参数是部分函数,??则轻松跟踪地图操作是否已进行实际更改(通过简单的参考检查),如此示例中的Erasure:

def squashBoxed(tp: Type): Type = tp.dealiasWiden match {
  case t @ RefinedType(parents,decls) =>
    val parents1 = parents mapConserve squashBoxed
    if (parents1 eq parents) tp
    else RefinedType(parents1,decls)
  // ...

如果没有执行实际更改,则代码可以防止之后运行某种昂贵的操作.
使用常规map()的用例的替代方案是..

> ..更昂贵[1]:迭代两个列表并在之后比较它们的元素
> .. not functional:跟踪传递给map()的部分函数是否通过改变某种外部标记进行更改 – >副作用,不是纯粹的,不是功能性的做事方式;也非常丑陋

[1]在特定情况下这是否显着取决于当然,在您优化之前通常会有疑问.一般来说,这种方法现在似乎较少使用,这可能是一种通常并不重要的赠品.

(编辑:李大同)

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

    推荐文章
      热点阅读