gpt4 book ai didi

scala - 我们可以在比赛中重用守卫内部的中间变量吗?

转载 作者:行者123 更新时间:2023-12-04 17:52:19 24 4
gpt4 key购买 nike

假设我有一个方法 foo 作为:

def foo(i:Int):Option[Int] = ??? // some code

现在我想对 IntSeq 进行如下操作:

Seq(1, 2).map{
case int => foo(int)
}.collect{
case Some(int) => int
}

将其结合起来的一种方法是:

Seq(1, 2).collect{
case int if foo(int).isDefined => foo(int)
}

有什么方法可以避免调用 foo 两次?

所以基本上我希望 foo(int)=> 的 LHS 上定义为准备好在 RHS 上使用的变量,而不必再次计算它.

最佳答案

foo(int) 只存在于 if 的范围内,所以没有。我认为这是不可能的。一般来说,我可能会使用类似于您使用 mapcollect 的第一段代码,因为 foo 仅在那个上下文。

在某些情况下,也可以完全重新表述问题。例如,这可以使用 flatMap 缩短:

def foo(i: Int): Option[Int] = Option(i).filter(_ > 1)

scala> Seq(1, 2).flatMap(foo)
res0: Seq[Int] = List(2)

关于scala - 我们可以在比赛中重用守卫内部的中间变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com