建议trim函数(trim、triml和trimr)再添加一个参数形式,即{{trim?}}
[trim? ^CharSequence s]
{{trim?}}先执行以支持部分应用。
新的文档字符串将是
“从字符串两端删除字符。
如果省略trim?,则删除空白字符。当提供时,它接受
一个字符,如果该字符应该被删除则返回true。”
示例测试
(deftest t-trim
(is (= "foo" (s/trim " foo \r\n")))
(is (= "bar" (s/trim "\u2000bar\t \u2002")))
;; 其他测试
(is (= "bar" (s/trim "$%#\u2000bar\t \u2002%$#"
#(or (Character/isWhitespace %) ((set "$#%") %))))))
类似于Python的strip -
https://docs.pythonlang.cn/2/library/stdtypes.html#str.strip
*方法:* 提出的解决方案并不非常符合DRY原则,但它遵循文件顶部的設计指南,更确切地说是第3点
"3. 函数利用字符串实现细节来
编写高性能的循环/递归而非使用高阶
函数。(这在通用应用程序代码中并不常见。)"
最初,我有一个解决方案,用pred调用替换了当前实现中的Character/isWhitespace。pred默认为is-whitespace?函数。
当然,这段代码更好,即使是trim-newline也可以直接调用trimr,从而减少了大量的重复,但这会增加始终调用函数的开销,而直接调用Character/isWhitespace。
我认为实现更优化且DRY的代码的唯一方法是使用宏,但我认为这并不一定会导致更简洁的代码。
鉴于string.clj中其他函数现有的设计风格,我觉得最佳解决方案就是简单地复制,以优化代码。
请求