gpt4 book ai didi

scala - 如何使用函数式编程方法在 Scala 中重写此代码

转载 作者:行者123 更新时间:2023-12-03 18:15:53 28 4
gpt4 key购买 nike

下面是执行一些 URL 规范化的代码片段。如何重写它以仅使用不可变变量?

当然,不会让它变得更大或更复杂。

private def normalizeUrl(url0: String) = {
var url = url0

if (url.endsWith("/")) {
url = url.dropRight(1)
}

if (url.indexOf(':') < 0 ||
url.indexOf(':') == 1) { //windows absolute path
url = "file:" + url;
}

url = url.replaceAll("\\\\", "/");

url
}

最佳答案

如果您想将一堆这些 if/then 条件链接在一起来修改字符串,您可以考虑添加一个隐式类来处理 if/then 评估,如下所示:

object UrlPimping{
implicit class PimpedUrl(val url:String) extends AnyVal{
def changeIf(condition:String => Boolean)(f:String => String):String = {
if (condition(url)) f(url)
else url
}
}
}

private def normalizeUrl(url: String) = {
import UrlPimping._

url.
changeIf(_.endsWith("/"))(_.dropRight(1)).
changeIf(u => u.indexOf(':') < 0 || u.indexOf(':') == 1)(u => s"file:$u").
replaceAll("\\\\", "/")
}

如果您只有这两个条件要评估,这将是矫枉过正,但如果您有更多条件并且这是一种常见模式,则可能会很好。

关于scala - 如何使用函数式编程方法在 Scala 中重写此代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30198986/

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