首页 > 解决方案 > 如何在 Clojure 中构造正确的字符串?

问题描述

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

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

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

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

代替__,必须在所有 3 个位置插入相同的表达式,以便所有 3 个情况下的相等性检查都为真。在这一点上我想出了str "Hello, "。据我所知,这应该产生"Hello, Dave" "Hello, Jenn" "Hello, Rhea"如何"!"在每个字符串的 and 处放置标记?(我只能“写”表达式代替__

谢谢

标签: clojure

解决方案


你想把一个函数放到__.

该函数将接受一个字符串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!

推荐阅读