【发布时间】:2019-04-01 17:58:35
【问题描述】:
我正在寻找更好的方法来检查 Clojure 中的两个字符串是否相等!
给定一个地图“报告”,比如
{:Result Pass}
,当我评估时
(type (:Result report))
我明白了:Java.Lang.String
为了检查:Result的值,我先尝试了
(if (= (:Result report) "Pass") (println "Pass"))
但检查失败。
所以我使用了比较方法,它有效:
(if (= 0 (compare (:Result report) "Pass")) (println "Pass"))
但是,我想知道 Clojure 中是否有与 Java 的 .equals() 方法等效的方法。或者更好的方法来做同样的事情。
【问题讨论】:
-
请确认您发布的 Pass 不是
{:Result Pass}中的字符串。即使是这样,您拥有的代码也应该可以工作,并且应该等同于最后一段代码。请发帖minimal reproducible example -
(def r {:Result "Pass"})(if (= (:Result r) "Pass") (println "Pass"))成功打印“通过”罚款。请再试一次,因为代码没问题。 -
你必须在字符串或其他东西中有隐藏的字符。
=非常适合比较字符串。试试(vec (:Result report))看看你是否缺少任何空白。我怀疑结尾有换行符之类的。 -
您已验证变量
Pass包含一个字符串。但它的内容是什么? -
每个人都有理由怀疑您声称您发布的数据是否正确,因为您一直声称
type返回Java.Lang.String,但事实并非如此:它只能返回java.lang.String。请准确地复制并粘贴您的输入,而不是转述它们。
标签: clojure