- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,我有一个Value类和一个将字符串转换为Value的隐式函数:
case class Value(v: String)
implicit def strToValue(s: String): Value = Value(s)
trait ReturnValue {
def f: Value
}
object Obj1 extends ReturnValue {
override def f: Value = "123"
}
object Obj2 extends ReturnValue {
override def f: Value = {
val v = Some("123").getOrElse("234")
v
}
}
object Obj3 extends ReturnValue {
override def f: Value = Some("123").getOrElse("234") // Compilation error: type mismatch
}
Error:(23, 50) type mismatch;
found : java.io.Serializable
required: Entry.Value
override def f: Value = Some("123").getOrElse("234") // Compilation error: type mismatch
最佳答案
此变体导致相同的编译错误,并可能显示编译器如何解构表达式:
object Obj3 extends ReturnValue {
override def f: Value = {
val v = Some("123") // is of type Some(String)
v.getOrElse("234": Value) // Compilation error: type mismatch
}
}
case class Value(v: String)
implicit def strToValue(s: String): Value = Value(s)
val vs = Some("123")
val v: Value = vs.getOrElse("234")
Value
的参数上的
getOrElse
,而不是其结果上。事实是可以通过启用
scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer")
的输出来确认(清除了一点-删除了明显不相关的注释):
private[this] val v: Value =
vs.getOrElse{[B >: String](default: => B)B}[java.io.Serializable]{(default: => java.io.Serializable)java.io.Serializable}( strToValue{(s: String)Value}("234"{String("234")}){Value} ){
vs
类型称为Some[String]
getOrElse
声明是def getOrElse[B >: A](default: => B): B
(此处A
是String
)B
推断为Value
,因为这是表达式的预期结果类型。 Value
和String
最具体的父类(super class)型是Serializable
val v: Value = vs.getOrElse("234")
的错误是:
类型不匹配;关于scala - 当对Option.getOrElse的返回值使用隐式转换时,为什么在Scala中类型推断失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56934944/
我想创建一个方法,它将一个选项数组和一个默认值作为参数,并返回第一个非空选项,否则返回默认值: def customGetOrElse[T](options : Array[Option[T]], d
我有以下代码: val userName = users.get(userID) match { case Some(user) => user.name case None => "Inva
我正在尝试创建一个函数来计算一个表达式,如果该表达式的结果不是“有限的”(由 is.finite 定义),那么它将返回一个默认值。在抛出错误的情况下,该函数仍应返回默认值。该函数也应该被向量化。 这应
在具有可选类型的语言中,您有一个名为 orElse 或 getOrElse 的 fn,它可以让您这样做: None.getOrElse(1) == 1 Some(2).getOrElse(1) ==
为什么当我输入这些时一切正常? Right(2).left getOrElse Right(4).left getOrElse Left("Error") 但是当我输入这个编译失败? Right[St
奇怪的... val h = new HashMap[Long, Int]() def mydefault0():Int = 101 println( h.getOrElse(
下面的代码有更好的写法吗? val t = map.get('type).getOrElse(""); if (t != "") "prefix" + t; 对内联代码感兴趣 val t = map.
为什么此代码在 Scala 2.9.2 中引发类型不匹配错误?我期望 getOrElse 返回类型 String 但实际上它返回 java.io.Serialized: scala> implicit
我是 Scala 的新手,每个人都说当 myFoo 包含在 Option 中时,使用类似 if myFoo.get is null then 的东西是不好的 (例如 Option[myFoo])在 S
在 Scala 中,我有一个散列 var unigram = new HashMap[String, Int] 我想从散列中获取元素的值,或者如果该元素不存在,我想获取 0。 所以我尝试像这样使用 g
val label = Try("here_a").getOrElse("here_b") 在 here_a 的情况下没有找到,这不是回退到here_b .为什么是.getOrElse无法正常运行?
我正在尝试遵循教程 https://www.jamesward.com/2012/02/21/play-framework-2-with-scala-anorm-json-coffeescript-j
考虑 scala> val m = Map('a -> 3, 'b -> 4) m: scala.collection.immutable.Map[Symbol,Int] = Map('a -> 3,
我正在尝试使用 Option.getOrElse()方法,但它返回 etiher Any或 ScalaObject而不是 Option 的正确类的实例被参数化了。我找不到有关此问题的任何提及,而且似乎
我是一个相当新的 Scala 开发人员。我是一位经验丰富的 Java 开发人员,到目前为止,我一直喜欢 Scala 的简单性。我真的很喜欢函数式结构,而且它们经常会迫使您编写更清晰的代码。然而最近我注
我有一个包含一些对的映射,我想为一个键分配一个默认值( bool 值),当我使用 getOrElse 时,键的默认值是一个字符串,我正在寻找一种方法来做到这一点一个整数或 bool 值。 例如: va
我对以下代码感到困惑:代码是人为的,但我仍然认为它是尾递归的。编译器不同意并产生错误消息: @annotation.tailrec def listSize(l : Seq[Any], s: Int
基本上我想提取一堆选项 a、b 等。这是在 Scala 中执行此操作的最佳方法吗?在我看来,括号中的 for-yield 有点令人困惑。 (for { a <- a b <- b c <-
在下面,maybeNext.map{rec}.getOrElse(n) 行使用 Option monad 来实现递归或转义模式。 scala> @tailrec
据我所知 Scalaz 的 \/没有get方法。有时我确定 \/ 中包含的值是正确的值,我不想使用 getOrElse .我想直接拿到。 ("3".right[Int]) getOrElse("123
我是一名优秀的程序员,十分优秀!