我需要映射一个序列,如果为空则认为它是一个None而不是一个空序列。所以:
val quote_ =
quote_inner_element.map( q=> {
val quote_link_regex(quote_link_id) = q.attr("href")
Quote(quote_link_id.toInt)
})
val quote = if(quote_.isEmpty) None else Some(quote_)
我讨厌定义两个变量。如果我做
val quote = Option(
quote_inner_element.map( q=> {
val quote_link_regex(quote_link_id) = q.attr("href")
Quote(quote_link_id.toInt)
}))
因为我获得了大量的Some(Seq())
。什么是糖,糖爸爸?
答案 0 :(得分:2)
implicit class SeqAugment[T](val s: Seq[T]) {
final def toOption: Option[Seq[T]] = if (s.isEmpty) None else Some(s);
}
val s = Seq(1, 2, 3);
s.toOption
答案 1 :(得分:2)
您可以通过多种方式避免创建两个顶级val:
使用内部val:
val quote = {
val quote = fooQuote map(q => myFunc(q))
if (quote.isEmpty) None else Some(quote)
}
请注意,即使val名称相同,它们也不会引用相同的值;内在的一个遮住外面。
使用匹配表达:
val quote = fooQuote map(q => myFunc(q)) match { case q => if (q.isEmpty) None else Some(q) }