对于普通字符串,我可以这样做:
val str = "asdzxc"
val (first, second) = str.splitAt(3) // splits into ("asd", "zxc")
我希望能为Option[String]
做类似的事情:
val optionalString: Option[String] = getOptionalString(...)
val (firstOption, secondOption) = ???
因此firstOption
和secondOption
的类型为Option[String]
。我知道我可以这样做:
optionalString.map(_.splitAt(3))
给我一个Option[(String, String)]
,但这不是我想要的。有什么想法吗?
答案 0 :(得分:2)
您可以使用折叠:
optionalString.map(_.splitAt(3)).fold((None: Option[String], None: Option[String])) { case (a, b) => (Some(a), Some(b)) }
或模式匹配(可能更清楚,因为它不需要显式类型参数):
optionalString.map(_.splitAt(3)) match {
case None => (None,None)
case Some((a,b)) => (Some(a), Some(b))
}