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

Scala以Option[Boolean]为入参的方法无法输出'hi'问题排查

问题原因分析
    1. 方法定义语法错误导致返回值固定为Unit
      Scala规定,如果方法定义时省略了等号=,直接在参数列表后写大括号方法体,该方法的返回值类型强制为Unit,对应的值就是你打印出来的()。你的example方法就用了这种写法,所以无论内部逻辑如何,最终返回值都是(),这是三次调用都输出()的核心原因。
    1. 业务逻辑判断条件错误
      你预期的是入参runHello为Some(true)时才返回hi,但现有代码的判断条件是runHello.isDefined,只要入参是Some包裹的内容(不管是true还是false)都会进入分支,完全不符合设计要求,正确的判断条件应该是runHello.contains(true)。
    1. 方法返回值逻辑错误
      Scala方法的返回值为方法体最后一个表达式的值,你的example方法体最后一行是None,就算修正了等号问题,该方法最终也只会返回None,不会返回hello方法的执行结果。同时你在分支内仅写了hello,如果没有作为返回值处理的话,这个调用的结果会被直接丢弃。
修正后的代码示例
class Poplar {
  def hello(): String = "hi"

  // 加等号明确要返回值,返回类型为Option[String]符合入参设计
  def example(runHello: Option[Boolean]): Option[String] = {
    if (runHello.contains(true)) {
      Some(hello())
    } else {
      None
    }
  }
}

object Main extends App {
  val p = new Poplar()
  // 需要直接输出字符串hi可以调用getOrElse解包Option
  println(p.example(Some(true)).getOrElse("")) // 输出 hi
  println(p.example(Some(false))) // 输出 None
  println(p.example(None)) // 输出 None
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:57:03