gpt4 book ai didi

Scala - 'for-yield' 子句可以在某些条件下不产生任何结果吗?

转载 作者:行者123 更新时间:2023-12-04 00:44:56 24 4
gpt4 key购买 nike

在 Scala 语言中,我想编写一个在给定范围内产生奇数的函数。该函数在迭代偶数时打印一些日志。该函数的第一个版本是:

def getOdds(N: Int): Traversable[Int] = {
val list = new mutable.MutableList[Int]
for (n <- 0 until N) {
if (n % 2 == 1) {
list += n
} else {
println("skip even number " + n)
}
}
return list
}

如果我省略打印日志,则实现变得非常简单:
def getOddsWithoutPrint(N: Int) =
for (n <- 0 until N if (n % 2 == 1)) yield n

但是,我不想错过日志记录部分。如何更紧凑地重写第一个版本?如果它可以像这样重写,那就太好了:
def IWantToDoSomethingSimilar(N: Int) =
for (n <- 0 until N) if (n % 2 == 1) yield n else println("skip even number " + n)

最佳答案

def IWantToDoSomethingSimilar(N: Int) = 
for {
n <- 0 until N
if n % 2 != 0 || { println("skip even number " + n); false }
} yield n

使用 filter而不是 for表达式会稍微简单一些。

关于Scala - 'for-yield' 子句可以在某些条件下不产生任何结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12447222/

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