在 URL 包含来自其他系统的源引用的内部网站上工作。这是业务需求,无法更改。即“ http://localhost:9000/source.address.com/7808/project/repo ”“ http://localhost:9000/build.address.com/17808/project/repo ”
我需要使用特征从“项目/回购”字符串/变量中删除这些字符串,以便可以从多个服务中本地使用。我还希望能够将更多源添加到此列表(已存在)而不修改方法。
“def normalizePath”是服务访问的方法,到目前为止2次非理想但合理的尝试。卡在使用 foldLeft 上,我希望得到一些帮助或更简单的方法来完成所描述的操作。下面的代码示例。
第一次尝试使用 if-else(不理想,因为需要在行下添加更多 if/else 语句并且比模式匹配更易读)
trait NormalizePath {
def normalizePath(path: String): String = {
if (path.startsWith("build.address.com/17808")) {
path.substring("build.address.com/17808".length, path.length)
} else {
path
}
}
}
和第二次尝试(不理想,因为可能会添加更多模式并且它生成比 if/else 更多的字节码)
trait NormalizePath {
val pattern = "build.address.com/17808/"
val pattern2 = "source.address.com/7808/"
def normalizePath(path: String) = path match {
case s if s.startsWith(pattern) => s.substring(pattern.length, s.length)
case s if s.startsWith(pattern2) => s.substring(pattern2.length, s.length)
case _ => path
}
}
最后一次尝试是使用地址列表(在其他地方已经存在,但在此处定义为 MWE)从路径字符串中删除出现,但它不起作用:
trait NormalizePath {
val replacements = (
"build.address.com/17808",
"source.address.com/7808/")
private def remove(path: String, string: String) = {
path-string
}
def normalizePath(path: String): String = {
replacements.foldLeft(path)(remove)
}
}
感谢您对此的任何帮助!