如何在Clojure中构造正确的String?

Tor*_*ili 0 clojure

我是Clojure的新手。我有以下表达式:

(= (__ "Dave") "Hello, Dave!")

(= (__ "Jenn") "Hello, Jenn!")

(= (__ "Rhea") "Hello, Rhea!")
Run Code Online (Sandbox Code Playgroud)

代替__,必须在所有3个地方插入相同的表达式,以使在所有3种情况下的相等性检查均成立。在这一点上我已经提出str "Hello, "。据我了解,这应该产生"Hello, Dave" "Hello, Jenn" "Hello, Rhea"如何"!"在每个字符串的和上放置标记?(我只能用“写”表达式代替__

谢谢

Dav*_*fer 5

您想将函数放到的位置__

该函数应采用一个字符串,s并应返回一个基于的字符串,s以满足三个测试用例。

可能的功能是

(fn [s] (str "Hello, " s "!"))
Run Code Online (Sandbox Code Playgroud)

可以使用Clojure语法糖编写

#(str "Hello, " % "!"))
Run Code Online (Sandbox Code Playgroud)

从而

(= (#(str "Hello, " % "!") "Dave") "Hello, Dave!")
Run Code Online (Sandbox Code Playgroud)

奖励:使用测试框架

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!
Run Code Online (Sandbox Code Playgroud)