Scala 2.10.1 中新的脱糖行为

2024-01-06

假设我有这个单子类:

case class Foo[A](xs: List[A]) {
  def map[B](f: A => B) = Foo(xs map f)
  def flatMap[B](f: A => Foo[B]) = Foo(xs flatMap f.andThen(_.xs))
  def withFilter(p: A => Boolean) = {
    println("Filtering!")
    Foo(xs filter p)
  }
}

以下内容来自 2.10.0 REPL 会话:

scala> for { (a, b) <- Foo(List(1 -> "x")) } yield a
res0: Foo[Int] = Foo(List(1))

2.10.1 中也有同样的事情:

scala> for { (a, b) <- Foo(List(1 -> "x")) } yield a
Filtering!
res0: Foo[Int] = Foo(List(1))

这对我来说是完全出乎意料的,并且在过滤需要额外约束的情况下(例如 Scalaz 的\/ or EitherT https://stackoverflow.com/q/17418165/334519).

我在 中找不到任何关于此更改的讨论2.10.1 发行说明 http://www.scala-lang.org/2.10.1。有人能指出这种新的脱糖行为是在哪里以及为什么引入的吗?


这个故事比这更复杂,它实际上是插入在那里的 2.10.0 回归。

The "no-withFilter“ 行为被引入c82ecab https://github.com/scala/scala/commit/c82ecab,并且因为诸如此类的事情SI-6968 https://issues.scala-lang.org/browse/SI-6968,这已部分恢复#1893 https://github.com/scala/scala/pull/1893。随后进行了进一步的调整(SI-6646 https://issues.scala-lang.org/browse/SI-6646, SI-7183 https://issues.scala-lang.org/browse/SI-7183)

您正在寻找的要点是:

解析器不能假设模式 (a, b) 会匹配,因为结果 .isInstanceOf[Tuple2] 的直到之后才能静态地知道 打字机。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 2.10.1 中新的脱糖行为 的相关文章

  • 如何转义单引号字符串中的单引号

    比方说 你有一个 Bashalias like alias rxvt urxvt 效果很好 However alias rxvt urxvt fg 111111 bg 111111 不会起作用 也不会 alias rxvt urxvt fg
  • 为什么scala不允许在trait中定义lazy val?

    我尝试用a来定义一个特质lazy val trait MyTrait lazy val something Int object SomeThing extends MyTrait override lazy val something I
  • 如何找出哪个依赖项导致特定库被下载?

    运行我的 SBT 项目时 控制台输出中有一行 info downloading http repository nexus content groups public org jboss netty netty 3 2 3 Final ne
  • 将参数传递给 Scala 对象

    是否可以从外部对象初始化 Scala 对象 我尝试初始化的 Scala 对象没有任何 Companion 类 这是一个例子 object ObjectA val mongoDBConnectionURI This is the Val th
  • 使用 Akka 将文件从服务器流式传输到客户端

    基本上我想允许用户从服务器下载 csv 文件 假设服务器上已存在 CSV 文件 API 端点通过 GET export 公开 如何将文件从 Akka HTTP 服务器流式传输到客户端 这就是我到目前为止所拥有的 Service def ex
  • Scala“对象”的继承

    我有这个Java代码 class Super public static void foo bar public static void bar out println BAR public static void main String
  • Slick 3 交易

    我对 slick 3 文档描述事务的方式感到困惑 我有 2 个光滑的代码 如下所示 def doSomething DB withTransaction implicit session gt userDao doSomething add
  • 测试期权价值的更好方法?

    我经常发现自己Option T 对于某些类型T并希望根据某个值来测试期权的价值 例如 val opt Some oxbow if opt isDefined opt get lakes do something 以下代码是等效的 并且不需要
  • Matplotlib 中经常使用的不寻常的 Python 语法元素

    一个附带条件 我的问题的核心语法元素是 Python 语言 然而 这个元素经常出现在 Matplotlib 库中 这是我见过它的唯一上下文 因此 我不确定这是一般的 Python 语法问题还是特定于库的问题 我所知道的是 我找不到任何要点
  • scala 元组拆包

    我知道这个问题已经以不同的方式出现过很多次 但我仍然不清楚 有没有办法达到以下目的 def foo a Int b Int foo a b right way to invoke foo foo getParams is there a w
  • 在sbt的build.sbt文件中添加模块依赖信息

    我在 IntelliJ 中有一个多模块项目 如该屏幕截图所示 contexProcessor 模块依赖于 contextSummary 模块 一旦我在项目结构中设置了依赖项 IntelliJ 就会处理所有事情 然而 当我跑步时sbt tes
  • Python 的“with”是一元吗?

    像我之前的许多鲁莽的先驱者一样 我正在努力穿越理解单子这片无路可走的荒原 我仍然在蹒跚学步 但我不禁注意到 Python 的某种类似 monad 的品质with陈述 考虑这个片段 with open input filename r as
  • Wireshark:在 GUI 中按多播过滤

    使用 Wireshark GUI 中的 Wireshark 过滤器 字段 我想过滤捕获结果 以便仅显示多播数据包 我见过这个帖子 https stackoverflow com questions 9728285 sending multi
  • 在 Scala REPL 中访问包私有方法

    假设我有一个private stuff method Stuff something in org my stuff 我可以在 Scala REPL 中做些什么 以便我可以调用Stuff something没有得到错误error value
  • 使用指针接收器调用函数的 Go 语法

    在Go中 如果我定义一个带有指针的函数作为接收者 它是否应该只允许从指针调用该函数 为什么从值本身调用这个函数就可以 并且有同样的效果 例如 在以下程序中 m1 reset 和 m2 reset 具有相同的效果 即使 m1 是一个值而 m2
  • scala 中“迭代 Seq 或如果为空”的更好版本?

    是否有更短 更好的方法来执行以下操作 mySeq map elmt gt do stuff if mySeq isEmpty some other stuff Ps 我正在使用 PlayFramework 这意味着在模板中使用 所以如果我错
  • 我需要比较两个数据帧以进行类型验证并发送非零值作为输出

    我正在比较两个数据帧 基本上 这些是两个不同数据源的模式 一个来自 hive 另一个来自 SAS9 2 我需要验证两个数据源的结构 因此我将模式转换为两个数据帧 它们是 SAS 架构将采用以下格式 scala gt metadata sho
  • 我必须实现 Applicative 和 Functor 来实现 Monad

    我正在尝试实现一个 Monad 实例 作为一个更简单的示例 假设如下 data Maybee a Notheeng Juust a instance Monad Maybee where return x Juust x Notheeng
  • JavaScript 对象声明语法 - 变量名作为属性

    JavaScript 为您提供了多种声明对象的方法 当您手头有大部分可用数据时 最方便的 在我看来 如下 var person name John age 23 object literal syntax 这个语法的一个奇怪之处在于它与以下
  • 首次使用 SBT - 检索代理背后的依赖项时出现问题

    我已经下载了 SBT sbt 0 13 15 zip 并将其解压缩 但在运行 sbt bat 时遇到问题 最初 我遇到了代理问题 当我发现需要指定时修复了这些问题onlyhttpsconfig 而不是 http 的 当提供两者时 它使用的是

随机推荐

  • C++ - 确定 Linux 中是否存在目录(而不是文件)[重复]

    这个问题在这里已经有答案了 在 Linux 中使用 C 如何确定目录 而不是文件 是否存在 我尝试使用 stat 函数 但当找到文件时它返回正值 我只想查找输入的字符串是否是目录 而不是其他内容 根据人 2 统计 http linux di
  • Go 中的条件编译

    我正在尝试写一个Gowrapper https github com deft code go enet using CGo http golang org cmd cgo for ENet https github com lsalzma
  • 如何在单击按钮时发送 wp_mail?

    我正在我的 WordPress 插件中构建一个选项页面 我有一个包含收件人 发件人 主题和消息以及保存和发送按钮的表单 这个想法是您填写收件人 发件人 主题和消息 单击 保存 然后单击 发送 发送消息 我在尝试在单击按钮时运行发送功能时遇到
  • 解析 Chrome 书签 Json 文件:Java

    目前我正在使用 netbeans IDE 我尝试使用其他解决方案 但到目前为止没有运气 问题是 我在尝试时遇到错误读取Json文件来自谷歌 Chrome 书签文件 C Users Admin AppData Local Google Chr
  • 如何向 Mule 有效负载添加附加数据?

    我正在尝试将一些额外的静态数据添加到入站 http 消息 作为 URL 参数接收 有效负载 然后将其提交到基于出站 http 表单的端点 我的骡子配置如下
  • 能否以编程方式获取运行 Android 6.0+ 的设备的 MAC 地址?

    能否以编程方式获取运行 Android 6 0 的设备的 MAC 地址 根据this https developer android com about versions marshmallow android 6 0 changes ht
  • 使用 OpenLayers 5 显示地理参考图像

    我正在尝试制作一个应用程序 用户可以在其中对扫描地图进行地理配准 您可以在此处查看示例 https codesandbox io s 2o99jvrnyy https codesandbox io s 2o99jvrnyy有两个图像 资产
  • #import 和 @class 之间有什么区别,什么时候应该使用其中之一?

    在过去的一个月左右的时间里 我一直在自学 Objective C 我是一名 Java 专家 现在我的大脑已经掌握了其中的大部分内容 目前让我感到困惑的一件事是 通过 class 导入类与 import 导入类有什么区别 一种比另一种更好 还
  • 如何减少Kafka主题的分区数量?

    我在 Kafka 上创建了一个具有 4 个分区的主题 默认设置number partition 4 现在我想将这个主题的数字分区更改为3 我尝试过跑步 bin kafka topics sh alter zookeeper localhos
  • 使用枚举描述绑定组合框

    我通过 Stackoverflow 发现有一种简单的方法可以用枚举填充组合框 cbTipos DataSource Enum GetValues typeof TiposTrabajo 就我而言 我为我的枚举定义了一些描述 public e
  • 如何捕获屏幕的一部分

    我正在使用 win32 PrintWindow 函数将屏幕捕获到 BitMap 对象 如果我只想捕获窗口的一部分区域 如何裁剪内存中的图像 这是我用来捕获整个窗口的代码 System Runtime InteropServices DllI
  • 有没有办法在 C# 中抑制警告,类似于 Java 的 @SuppressWarnings 注释?

    有没有办法在 C 中抑制警告 类似于 Java 的 SuppressWarnings 注释 如果做不到这一点 是否有另一种方法可以抑制 Visual Studio 中的警告 Yes 如需禁用 请使用 pragma warning disab
  • Python:文件中的反斜杠(\u...)

    我有一个包含 u 格式的 unicode 字符的文件 我想将它们作为普通的 unicode 字符串写入另一个文件 但我无法将反斜杠解释为转义字符 所以我把它放在一个文件中 例如 u1203 u1208 u1208 u0074 u00E4 u
  • C++ 类函数应该以 } 结尾吗?或者只有一个}?

    关于 C 语法的基本问题 C 函数应该以 结尾吗 或者没关系 或者这两个例子有什么区别 有结局 void Test print 没有 void Test print 我见过有或没有的 C 代码 但我不明白有什么区别 Thanks Updat
  • 如何将 xsd 转换为人类可读的文档? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们有一些基于 XML 的接口 这些接口在 XSD 模式中得到了很好的记录 这些接口现在将公开 我们希望为它们创建参考文档 有没有一个工具
  • java 8 中删除 JDBC ODBC 桥

    从 Java 8 开始 JDK 将不再包含 JDBC ODBC Bridge Class forName sun jdbc odbc JdbcOdbcDriver classNotFoundException is thrown 还有其他连
  • 在 PictureBox 中绘制火车时,C# 中出现内存不足异常

    我正在尝试创建一个应用程序来显示在线火车picturebox 所以为了实现这个我创建了一个worker thread为了获得在线火车位置 所以我定义了线程 如下所示 private Thread workerThread null priv
  • 应如何实施电子邮件地址选择加入?

    设想 用户给您一个电子邮件地址 在他们注册服务之前 他们需要验证电子邮件地址 您通过电子邮件发送一个 URL 他们单击它 然后他们就可以订阅服务 问题 网址是什么样的 我认为随机指南就可以了 您是否使用相同的随机密钥来取消订阅请求 我应该考
  • boost 正则表达式中的链接器错误

    我想了解有关 boost lib 中的正则表达式的一些知识 我尝试编译这个简单的示例代码 regex search example include
  • Scala 2.10.1 中新的脱糖行为

    假设我有这个单子类 case class Foo A xs List A def map B f A gt B Foo xs map f def flatMap B f A gt Foo B Foo xs flatMap f andThen