建议将 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. 函数利用字符串实现细节来编写高性能的循环/递归,而不是使用高阶函数。(这在通用应用程序代码中并不常见。)"
编写高效率的循环/递归,而不是使用高阶
函数。 (这在通用应用程序代码中并不常见。)"
代码。)
最初,我有一个解决方案,在这个方案中,我将当前实现中替换了 Character/isWhitespace 为调用 pred。pred 默认为 is-whitespace? 函数。
当然,这段代码更好,trim-newline也可以直接调用trimr,减少大量重复,但它增加了调用函数的开销,而不是直接调用 Character/isWhitespace。
我看到唯一优化和 DRY 代码的方法是使用宏,但我认为这并不一定能导致更整洁的代码。
鉴于 string.clj 中其他函数 existing 的设计风格,我认为最好的解决方案是简单地复制,以优化代码。