gpt4 book ai didi

scala - 替换 Scala 中的 if-without-else

转载 作者:行者123 更新时间:2023-12-03 06:46:01 36 4
gpt4 key购买 nike

在 Scala 中你通常如何用函数式方式替换 if-without-else?

例如,像命令式风格的典型模式一样:

var list = List("a", "b", "c")

if (flag) { // flag is boolean variable
// do something inside if flag is true
list = "x" :: list
}
// if flag is false, nothing happened

我是这样想的,以使其发挥作用:

val tempList = List("a", "b", "c")
val list = if (flag) "x" :: tempList else tempList

是否有更好的方法而不使用中间变量?

那么任何人都可以分享如何消除 scala 中的 if-without-else 吗?

最佳答案

通常最好避免临时变量使命名空间变得困惑。所以像这样的东西会更好:

val list = {
val temp = List("a", "b", "c")
if (flag) "x" :: temp else temp
}

val list = List("a", "b", "c") match {
case x if flag => "x" :: x
case x => x
}

如果您发现自己经常这样做,并且性能不是一个大问题,那么定义一个扩展方法可能会很方便。我的个人图书馆中有一个如下所示:

implicit class AnythingCanPickFn[A](private val underlying: A) extends AnyVal {
/** Transforms self according to `f` for those values where `p` is true. */
@inline def pickFn(p: A => Boolean)(f: A => A) =
if (p(underlying)) f(underlying) else underlying
}

你可以像这样使用这个:

List("a", "b", "c").pickFn(_ => flag){ "x" :: _ }

关于scala - 替换 Scala 中的 if-without-else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28263789/

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