gpt4 book ai didi

scala - 如果第一个为空,则返回第二个字符串?

转载 作者:行者123 更新时间:2023-12-01 08:57:45 27 4
gpt4 key购买 nike

这是我自己写的一个成语。

def chooseName(nameFinder: NameFinder) = {
if(nameFinder.getReliableName.isEmpty) nameFinder.getReliableName
else nameFinder.secondBestChoice
}

为了避免在 nameFinder 上调用两次 getReliableName(),我添加了一些代码,使我的方法看起来不那么优雅。

def chooseName(nameFinder: NameFinder) = {
val reliableName = nameFinder.getReliableName()
val secondBestChoice = nameFinder.getSecondBestChoice()
if(reliableName.isEmpty) reliableName
else secondBestChoice
}

这感觉很脏,因为我使用 vals 创建了不必要的状态量,只是为了防止重复的方法调用。 Scala 教会了我,每当我感到肮脏时,总会有更好的方法。

有没有更优雅的写法?

Here's two Strings, return whichever isn't empty while favoring the first

最佳答案

当然,没有必要总是调用 getSecondBestChoice。就个人而言,我发现更改后的代码没有任何不雅之处 - 很清楚它的作用,没有可变状态。其他答案似乎过于复杂,只是为了避免使用 val

def chooseName(nameFinder: NameFinder) = {
val reliableName = nameFinder.getReliableName()

if(reliableName.isEmpty) reliableName
else nameFinder.getSecondBestChoice()
}

如果你真的想避免使用 val,这里有另一个变体(如果有两个以上的替代方案,则可以很好地概括)

List(nameFinder.getReliableName(), nameFinder.getSecondBestChoice()).find(_.nonEmpty).get

(或 getOrElse(lastResort) 如果列表中的所有内容也可能为空)

关于scala - 如果第一个为空,则返回第二个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25393975/

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