感谢 Martin Odersky 在 Coursera 上提供的最新产品,我已经开始使用scala.util.Try
. 然而,我惊讶地发现它不一定能很好地与集合 monad 配合使用,因为它没有实现scala.collection.GetTraversableOnce
.
这可能会派上用场。例如,您可以将字符串列表转换为整数,同时丢弃错误的字符串,如下所示:
def ints(strs:List[String]):List[Int] = strs.flatMap(s => Try(s.toInt))
解决方法很简单。只需将 转换Try
为 anOption
并让其隐式转换为我们工作:
def ints(strs:List[String]):List[Int] = strs.flatMap(s => Try(s.toInt).toOption)
在我看来,Try
要么实现GenTraversableOnce
要么拥有自己的隐式转换。谁能解释为什么它没有?仅仅是事实实际上Try
不是单子吗?