You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala代码为何输出List((), (), (), ())而非预期的List(2,4)?

问题原因分析

你的Scala代码出现这个问题的核心原因是Scala的if是表达式而非语句,必须有明确的返回值:

  • 当i3为奇数时,if (i3 % 2 == 0)没有对应的else分支,Scala会自动补全else (),也就是返回Unit类型的()。
  • for推导式的yield会收集每一次循环的执行结果,4次循环后会生成包含两个()和两个数字的集合(实际应为List((), 2, (), 4),你看到的全()可能是输出时的误判)。
正确写法

要得到预期的List(2,4),最简洁的方式是在for推导式中使用守卫条件,直接过滤掉不满足条件的元素:

val ans1 = for(i3 <- 1 to 4 if i3 % 2 == 0) yield i3

这样推导式只会遍历符合条件的i3,最终收集到的就是List(2,4)。

也可以给if补充else分支,返回None后再扁平化,但守卫写法更直观高效:

val ans1 = (for(i3 <- 1 to 4) yield {
  if (i3 % 2 == 0) Some(i3) else None
}).flatten

内容的提问来源于stack exchange,提问作者Rocky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:06:27