clojure - 如何在 Clojure 中构造正确的字符串?
问题描述
我是 Clojure 的新手。我有以下表达式:
(= (__ "Dave") "Hello, Dave!")
(= (__ "Jenn") "Hello, Jenn!")
(= (__ "Rhea") "Hello, Rhea!")
代替__
,必须在所有 3 个位置插入相同的表达式,以便所有 3 个情况下的相等性检查都为真。在这一点上我想出了str "Hello, "
。据我所知,这应该产生"Hello, Dave" "Hello, Jenn" "Hello, Rhea"
如何"!"
在每个字符串的 and 处放置标记?(我只能“写”表达式代替__
)
谢谢
解决方案
你想把一个函数放到__
.
该函数将接受一个字符串s
并返回一个基于s
以满足三个测试用例的字符串。
一个可能的函数是
(fn [s] (str "Hello, " s "!"))
可以使用 Clojure 语法糖编写
#(str "Hello, " % "!"))
因此
(= (#(str "Hello, " % "!") "Dave") "Hello, Dave!")
奖励:使用测试框架
Clojure 带有一个很好的测试库,clojure.test(我不知道为什么它被称为 API,这意味着在可调用函数的另一端有一个组件;它只是一个库)
我们可以使用测试库来获得良好的效果:
(require '[clojure.test :as t]) ; make library visible
(def myfun (fn [s] (str "Hello, " s "!"))) ; our function as symbol myfun
(t/deftest test-stringmanip
(t/is (= (myfun "Dave") "Hello, Dave!"))
(t/is (= (myfun "Jenn") "Hello, Jenn!"))
(t/is (= (myfun "Rhea") "Hello, Rhea!")))
(t/run-tests) ; do it!
推荐阅读
- python - 查找子字符串
- azure - 如何读取位于 Azure 中的 .csv 文件?
- python - Python O365 模块突然停止工作
- php - 当我添加 $name 时,PHP 联系表不起作用
- python - 无法捕获 HTTP 错误 500:内部服务器错误
- java - 从 URL 流中读取的 Java 有选择地工作
- android - Kotlin 在盒装和未盒装数字的身份方面表现得很奇怪
- amazon-web-services - AWS EKS 主集群安全组
- ruby-on-rails - 如何将一个模型的记录分配给活动管理员中的另一个关联记录?
- angular - Angular Bootstrap 切换选项卡并使用数据切换传递数据