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

Scala中如何在pipe链式调用里用内置函数替代自定义Option.get封装

解决方案

pipe算子要求接收单参数函数,而Option.get是Option类的成员方法,不能直接传入,只要做简单的语法适配即可直接使用Scala内置实现,无需自定义myOptionGet函数,也不会增加代码冗余,保留链式调用逻辑,有以下几种可行写法:

写法1:匿名占位符(全版本通用,最简洁)

直接用_.get作为参数传给pipe,这是Scala原生语法糖,会自动编译为符合要求的Function1[Option[T], T]类型的匿名函数,没有任何冗余代码:

package playground

import scala.util.chaining.scalaUtilChainingOps

object TEST123 {
  def main(args: Array[String]): Unit = {
    Some("abc") pipe
      (_.get) pipe
      println
    // 输出:abc
  }
}

写法2:复用独立函数(适合多处调用场景)

如果需要在多个地方用到这个逻辑,不想重复写_.get,可以直接定义基于内置方法转换的泛型函数,不需要自己实现获取逻辑:

Scala 3 版本(支持多态函数)

val optionGet: [T] => Option[T] => T = [T] => (o: Option[T]) => o.get

// 使用
Some("abc") pipe optionGet pipe println

Scala 2 版本

def optionGet[T]: Option[T] => T = _.get

// 使用
Some("abc") pipe optionGet pipe println

注意事项

不要在生产代码中随意使用Option.get,该方法会在Option为None时直接抛出异常,建议优先使用getOrElse、fold等更安全的API,同样可以适配pipe链式调用,示例如下:

// 安全写法示例,None时返回默认值
Option.empty[String] pipe (_.getOrElse("默认值")) pipe println
// 输出:默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:30:06