【问题标题】:Intellij hint for output type of a scala methodscala 方法的输出类型的 Intellij 提示
【发布时间】:2021-09-19 11:25:42
【问题描述】:

我在 Intellij 的 scala 程序中编写了一个方法,如下所示:

def myMethod(c: Option[C]) = {
    val x = ...
    val y = ...
    c.filter(...)
     .map(_ => {
          (x,y) match {
             case (a,b) => "val1"
             case (c,d) => "val2"
             case (_, _) => "val3"
          }
       })
}

Intellij 提示此方法的输出类型为 Option[String]。但是由于我使用了过滤方法,它可能返回None,所以这个提示是不是错了?

【问题讨论】:

  • 你的问题对我来说听起来很矛盾。 IDE 说该方法返回一个选项。正如您正确指出的那样,您的filter 返回一个选项。但是您说 IDE 同意您的做法是错误的?我不关注。
  • 但是如果过滤器返回无,地图甚至不会被应用。所以返回类型不应该是 None 和 Option[String] 的共同祖先。

标签: scala intellij-idea


【解决方案1】:

object None 扩展Option[Nothing]

Nothing 是“底层类型”,即它继承自所有内容。

Option 在其类型参数上是协变的。

这意味着NoneOption[X] 的后代,对于任何可能的X

因此NoneOption[String] 之间的LUB(最小上界)是Option[String]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 2014-08-15
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多