当前位置: 首页 > 知识库问答 >
问题:

对flatten的调用在一个用例上编译失败,但在另一个用例上工作

韩烈
2023-03-14

我想展平一系列集合:

val test = for(i <- 1 to 3) yield {
  if(i == 1)
    Set.empty
  else
    Set(9, 1)
}
val b = test.flatten

这失败了:

ScalaFiddle。scala:7:错误:scala没有可用的隐式视图。收集不变的设置[_

但真正让我困惑的是为什么这行得通?:

val test = for(i <- 1 to 3) yield {
  if(i == 1)
    Set.empty
  else
    Set(9, 1)
}
println(test.flatten)
// compiles and prints Vector(9, 1, 9, 1) when run

所以我的问题是:println(test.flatten)中的flatten和val b=test.flatten中对flatten的调用有什么区别?

共有2个答案

麹渊
2023-03-14

多亏了迈克尔·扎哈克的评论,我才得以成功。

要么是

val test = for(i <- 1 to 3) yield {
  if(i == 1)
    Set.empty[Int]
  else
    Set(9, 1)
}
val b = test.flatten

val test = for(i <- 1 to 3) yield {
  if(i == 1)
    Set.empty
  else
    Set(9, 1)
}
val b: Seq[Int] = test.flatten

应该有效。将类型设置为“设置”。清空或告诉编译器我们期望val b的类型。

鲁博赡
2023-03-14

或者,应该可以反转您的条件并使其成为for中的保护,并在那里使用您的Set

val b = for {
  i <- 1 to 3
  if i != 1
  j <- Set(9, 1)
} yield j

// b: scala.collection.immutable.IndexedSeq[Int] = Vector(9, 1, 9, 1)
 类似资料:
  • 我正在使用flutter_stripe插件进行条纹付款。它正在 IOS 上运行,但在Android上,我收到此错误.根据flutter_stripe文档,为Android和ios完成的所有设置。 失败:构建失败,但有例外。 < li >哪里出错:任务执行失败':app:checkDebugAarMetadata '。 无法解析配置的所有文件': app:调试运行时间类路径'。无法解析com.str

  • 首先对我糟糕的英文写作表示歉意! 我在Wildfly 8上部署了我的EJB bean并在Wildfly 8中调用它没有任何问题。但是当我将客户端服务器从Wildfly 8更改为Jboss AS 7时,我得到“没有ejb接收器错误”。 Wildfly 8服务器端运行输出: 输出日志: ==========================================================

  • 下面的SQL语句在flyway v5.1.3和DB2 LUW 10.5中会失败,但是在DB2中使用客户机直接执行时可以正常工作。 错误消息: “DB2 SQL错误:SQLCODE=-440,SQLSTATE=42884,SQLERRMC = TEST _ STATUS程序,驾驶员=4.19.26 " 绝对是飞行路线的问题。有谁知道解决方法或修复方法?

  • 编辑:我的解决方案,某种程度上。在本例中,我解析的是专门以美国为中心的NOAA预测。因此,我攻击了我自己的zoneid.of(“mdt”)以映射到17个时区的偏移量:https://www.timetemperature.com/abbreviations/united_states_time_zone_abbreviations.shtml 我隐约感到肮脏和羞愧,但这个特定的日期解析器是特定于这

  • 问题内容: 我一直在尝试为我的Roguelike游戏添加一个JLabel。不幸的是,它似乎不起作用。到目前为止,这是我的代码: 我已经阅读了一些其他问题的解决方案,并且只需将JLabel添加到另一个解决方案中就可以完成。它不按这里的预期工作,为什么? PS:我不想为我的JPanel使用JLayeredPane。 问题答案: 不要使用组件(即JLabels)创建游戏环境。相反,您可以绘制所有游戏对象