用于将可选字符串解析为int

时间:2019-06-20 15:01:00

标签: string scala for-comprehension scala-option

说我要理解以下内容:

val validatedInput = for {
    stringID <- parseToInt(optionalInputID)
} yield (stringID)

其中optionalInputID是Option[String]类型的输入参数。我希望能够将Option [String]转换为只是一个String,如果当然存在一个选项。据我所知,您不能在a内进行大小写匹配以进行理解。

一些细节已被省略,例如其他关于理解项的细节。因此,我想知道是否有可能在理解中做到这一点。如果没有,那么什么是合适的选择?我可以在理解之外做吗?

2 个答案:

答案 0 :(得分:4)

只需将其添加到for comprehension

val validatedInput = for {
  inputID <- optionalInputID
  stringID <- parseToInt(inputID)
} yield (stringID)

仅当parseToInt的类型为Option时,它才有效。如果它返回Try,则无法执行-因为您无法在同一理解中混合使用TryOption

如果parseToInt返回Try,则可以执行以下操作:

val validatedInput = for {
  inputID <- optionalInputID
  stringID <- parseToInt(inputID).toOption
} yield (stringID)

答案 1 :(得分:1)

  

我希望能够将Option [String]转换为一个字符串。

     

因此,我想知道是否有可能在理解中做到这一点

在Scala中,for-comprehension消减为mapflatMapfilter的组合,这些都不允许从Option中提取值

  

如果没有,那么什么是合适的选择?我可以在理解之外做吗?

为此,您可以使用get(不安全)之一,或更安全的版本getOrElsefold


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"