如何无需每个文件导入cats即可让.some在Scala项目全局可用
全局可用
.some语法无需每次导入cats的实现方案 前置要求:你的项目已经正确添加了cats-core依赖,版本与当前使用的Scala版本兼容。
方案1:自定义项目级全局导出(更灵活,适合需要同时全局导入多个工具类的场景)
- 步骤1:在项目源码目录下创建自定义包对象,路径为
src/main/scala/com/你的项目名/package.scala,内容如下:package com // 下面的yourproject替换为你项目的实际包名 package object yourproject { // Scala 3 写法 export cats.syntax.option._ // 若使用Scala 2,替换为下面的隐式转换写法 // import cats.syntax.option._ // implicit def toCatsOptionOps[A](value: A): cats.syntax.OptionOps[A] = optionSyntax(value) // 你还可以在这里导出其他需要全局使用的语法,比如either、show等 // export cats.syntax.either._ } - 步骤2:修改
build.sbt配置,添加全局自动导入规则:ThisBuild / scalacOptions ++= Seq( // 按顺序指定全局自动导入的包,最后加你自定义的包即可 "-Yimports:java.lang,scala,scala.Predef,com.yourproject" ) // 若使用Scala 2.12及更早版本,将上面的-Yimports替换为-Ximports
方案2:直接配置全局导入cats语法(更简单,不需要额外创建文件)
如果不需要自定义其他全局内容,直接在build.sbt中添加以下配置即可:
ThisBuild / scalacOptions ++= Seq( "-Yimports:java.lang,scala,scala.Predef,cats.syntax.option" )
效果验证
配置完成后重新加载sbt项目,就可以在任意Scala文件中直接使用.some语法,无需单独导入cats相关包:
val intOpt = 1.some val strOpt = "测试内容".some val noneInt = none[Int] // 同时也可以直接用none方法
内容的提问来源于stack exchange,提问作者Blankman
相关产品推荐
相关产品推荐

