建议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中其他函数的现有设计风格,我认为最好的解决方案就是简单地复制,以优化代码。