斯卡拉 - Option.getOrElse() "type erasure"?

标签 scala option type-erasure

我正在尝试使用 Option.getOrElse()方法,但它返回 etiher AnyScalaObject而不是 Option 的正确类的实例被参数化了。我找不到有关此问题的任何提及,而且似乎不应该存在。我究竟做错了什么?

class MyClass {

  def isOk = true

}

val myVal = Some(new MyClass) // :Option[MyClass]

val check = myVal.getOrElse(false).isOk

无法调用isOk方法,因为它尝试在 Any 上调用它.

最佳答案

您正在尝试调用方法 isOkMyClass 的基类上和 Boolean (Any)。

试试这个:

scala> class MyClass(b: Boolean) { def isOk = b }
defined class MyClass

scala> val myVal = Some(new MyClass(true))
myVal: Some[MyClass] = Some(MyClass@35d56bbe)

scala> myVal.map{_.isOk}.getOrElse(false)
res0: Boolean = true

scala> myVal.getOrElse(new MyClass(false)).isOk
res1: Boolean = true

关于斯卡拉 - Option.getOrElse() "type erasure"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700744/

相关文章:

swift - 如何将数组 block 传递给 inout 函数?类型删除?

Swift:为符合通用协议(protocol)的通用类创建包装类时出错

scala - 如果 `for` 中的至少一个组件为 None,则 for-comprehension 返回 None

scala - Clojure seq 替代 Scala Option[T]

linux - bash中的“for option”和bash中的echo

php - 从PHP/MySQL INSERT INTO表生成选择选项

ios - 符合关联类型协议(protocol)的对象的 Swift 集合

scala - scala中“Convert” Option [x]到x

eclipse - .jar 文件与不兼容的 Scala 版本 (2.10) 交叉编译

scala - 与 sbt 汇编的不及物依赖