我正在尝试检索用于从字符串创建枚举的案例对象
参考自从 Scala 中的 Some 中提取字段 https://stackoverflow.com/questions/20700167/extracting-field-from-some-in-scala
sealed trait Mapping {def code: Int;def desc: Symbol}
object types {
case object TypeA extends Mapping {
val code = 0;
val desc = 'A
}
case object TypeB extends Mapping {
val code = 1;
val desc = 'B
}
val values=List(TypeA,TypeB)
def getType(desc: Symbol) =
values.find(_.desc == desc)
}
下面的代码使我能够从Some(TypeA)
var s=types.getType('A)
方法一
s match{
case Some(value)=>print(value.code)
}
方法2
print(s.fold {-1} { x => x.code })
以下是查询
- 我不清楚第二种方法谁能解释一下如何折叠
在这里工作
- 我想使用默认类型的 case 对象来表示
None
如果没有找到匹配项
我不清楚第二种方法谁能解释一下这里的折叠是如何工作的
这是签名fold
:
def fold[B](ifEmpty: ⇒ B)(f: (A) ⇒ B): B
第一个参数ifEmpty
是在以下情况下将返回的“默认”值Option
为空,而第二个参数f
是对选项包含的值(如果存在)执行的函数。
opt.fold(a)(f)
那么相当于
opt.map(f).getOrElse(a)
or
opt match {
case None => a
case Some(v) => f(v)
}
我想使用默认类型的 case 对象来表示 None,以防找不到匹配项
你可以这样做:
sealed trait Mapping {def code: Int;def desc: Symbol}
object types {
case object TypeA extends Mapping {
val code = 0;
val desc = 'A
}
case object TypeB extends Mapping {
val code = 1;
val desc = 'B
}
case object DefaultType extends Mapping {
val code = -1
val desc = 'Default
}
val values = List(TypeA,TypeB)
def getType(desc: Symbol): Mapping =
values.find(_.desc == desc).getOrElse(DefaultType)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)