加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 放弃在Option上调用`get`并生成编译错误

发布时间:2020-12-16 19:07:36 所属栏目:安全 来源:网络整理
导读:如果我想在任何Option值上调用.get时产生编译时错误,那该怎么办呢? 没有编写任何自定义宏但是猜测它是时候了吗?有什么指针吗? 解决方法 有一个名为wartremover的编译器插件,它提供了你想要的东西. https://github.com/typelevel/wartremover 它有一些错误
如果我想在任何Option值上调用.get时产生编译时错误,那该怎么办呢?

没有编写任何自定义宏但是猜测它是时候了吗?有什么指针吗?

解决方法

有一个名为wartremover的编译器插件,它提供了你想要的东西.
https://github.com/typelevel/wartremover

它有一些错误消息和一些scala函数的警告,应该避免安全.

这是来自github自述文件页面的OptionPartial wart的描述:

scala.Option has a get method which will throw if the value is
None. The program should be refactored to use scala.Option#fold to
explicitly handle both the Some and None cases.

编译器插件

要将wartremover作为插件添加到scalac,您需要将其添加到项目/ plugins.sbt:

resolvers += Resolver.sonatypeRepo("releases")

addSbtPlugin("org.brianmckenna" % "sbt-wartremover" % "0.11")

并在build.sbt中激活它:

wartremoverErrors ++= Warts.unsafe

https://github.com/typelevel/wartremover/blob/master/OTHER-WAYS.md描述了如何使用插件的其他方式,其中一个使用它作为宏,如问题中所述.

将wart remover作为库添加到build.sbt:

resolvers += Resolver.sonatypeRepo("releases")

libraryDependencies += "org.brianmckenna" %% "wartremover" % "0.11"

你可以把任何疣变成一个宏,就像这样:

scala> import language.experimental.macros
import language.experimental.macros

scala> import org.brianmckenna.wartremover.warts.Unsafe
import org.brianmckenna.wartremover.warts.Unsafe

scala> def safe(expr: Any):Any = macro Unsafe.asMacro
safe: (expr: Any)Any

scala> safe { 1.some.get  }
<console>:10: error: Option#get is disabled - use Option#fold instead
              safe { 1.some.get  }

该示例改编自wartremover github页面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读