仍然有错误"value copy is not a member of Nothing"即使我过滤了什么都没有类



我使用scala 2.11.2。这是我的一部分功能:

import scala.reflect.runtime.universe._
p => p.filter(p => typeOf[p.type] != typeOf[Nothing]).flatMap {
    case Some(profile) => {
        ...
        env.userService.save(profile.copy(passwordInfo = Some(hashed)),...) //<---------error here
    }
    case _ => ...
}

编译错误是:

PasswordReset.scala:120: value copy is not a member of Nothing
[error]                   env.userService.save(profile.copy(passwordI
nfo = Some(hashed)), SaveMode.PasswordChange);
[error]                                                ^

我想我使用滤波器相位过滤Nothing类型,但为什么它仍然给我type Nothing错误。我不想:

profile.getDefault().copy(...)

因为我真的需要复制profile而不是复制默认值,如果profile是Nothing就删除它。怎么做呢?

过滤器不改变类型

scala> def f[A](x: Option[A]) = x filter (_ != null)
f: [A](x: Option[A])Option[A]

Option[A]进来,Option[A]出去。

你是在建议过滤器函数中的运行时检查应该指示编译器接受你的类型参数不是Nothing,但它不是这样工作的。

scala> f(None)
res2: Option[Nothing] = None

如果Nothing被推断,那么Nothing就是你得到的。

你想要避免编译器在某处推断出Nothing。有时需要提供显式的类型参数:

scala> f[String](None)
res3: Option[String] = None
scala> f[String](None) map (_.length)
res4: Option[Int] = None

scala> f(None) map (_.length)
<console>:9: error: value length is not a member of Nothing
              f(None) map (_.length)
                             ^

但是你也可以用不同的方式来表达你的代码

相关内容

  • 没有找到相关文章

最新更新