说我要理解以下内容:
val validatedInput = for {
stringID <- parseToInt(optionalInputID)
} yield (stringID)
其中optionalInputID是Option[String]
类型的输入参数。我希望能够将Option [String]转换为只是一个String,如果当然存在一个选项。据我所知,您不能在a内进行大小写匹配以进行理解。
一些细节已被省略,例如其他关于理解项的细节。因此,我想知道是否有可能在理解中做到这一点。如果没有,那么什么是合适的选择?我可以在理解之外做吗?
答案 0 :(得分:4)
只需将其添加到for comprehension
:
val validatedInput = for {
inputID <- optionalInputID
stringID <- parseToInt(inputID)
} yield (stringID)
仅当parseToInt
的类型为Option
时,它才有效。如果它返回Try
,则无法执行-因为您无法在同一理解中混合使用Try
和Option
。
如果parseToInt
返回Try
,则可以执行以下操作:
val validatedInput = for {
inputID <- optionalInputID
stringID <- parseToInt(inputID).toOption
} yield (stringID)
答案 1 :(得分:1)
我希望能够将Option [String]转换为一个字符串。
因此,我想知道是否有可能在理解中做到这一点
在Scala中,for-comprehension
消减为map
,flatMap
,filter
的组合,这些都不允许从Option
中提取值
如果没有,那么什么是合适的选择?我可以在理解之外做吗?
为此,您可以使用get
(不安全)之一,或更安全的版本getOrElse
或fold
:
val validatedInput: Option[String] = Some("myString")
scala>validatedInput.get
// res1: String = "myString"
scala>validatedInput.getOrElse("empty")
// res2: String = "myString"
scala>validatedInput.fold("empty")(identity)
// res3: String = "myString"