假设我使用方法A
获得了课程foo
:
class A(x: Int) { def foo(): Option[Int] = if (x > 0) Some(x) else None }
现在我正在写这样的函数bar
:
def bar(as: List[A]): Option[(A, Int)] = for {
a <- as.view.find(_.foo.nonEmpty)
foo <- a.foo
} yield (a, foo)
上面的代码工作正常,但它为找到的foo
实例调用了A
方法两次。如何为找到的bar
实例重新编写foo
仅为一次调用方法A
?
答案 0 :(得分:1)
as.iterator.flatMap { a => a.foo.map { a -> _ } }.find(_ => true)
答案 1 :(得分:1)
使用流。流中的元素被懒惰地评估。
window.location = '<url>'
window.location.href = '<url>'
window.location.assign('<url>')