如何使用函数式编程方法在Scala中重写此代码
发布时间:2020-12-16 18:26:45 所属栏目:安全 来源:网络整理
导读:下面是执行一些URL规范化的代码片段.如何重写它只使用不可变变量? 当然,不要让它更大或更复杂. private def normalizeUrl(url0: String) = { var url = url0 if (url.endsWith("/")) { url = url.dropRight(1) } if (url.indexOf(':') 0 || url.indexOf(':'
下面是执行一些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("\","/") } 如果你只考虑这两个条件,这将是一种过度杀伤,但如果你有更多的条件可能会很好,这是一个常见的模式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |