我正在看优秀的 Clojure 教程here http://ociweb.com/jnb/jnbMar2009.html。在其中一个示例中,它具有如下所示的 Clojure 代码:
(def vowel? (set "aeiou"))
这使得元音对于元音返回 true,对于辅音返回 false:
(vowel? (first "abc")) ; => true
(vowel? (first "cba")) ; => false
为什么是这样?我假设它与变量名称后面的问号有关。在教程中找不到任何内容......
Edit我才发现vowel?
不返回 true 或 false,而是返回元素本身或 nil。看我自己的回答。
这与地图(Clojure 中最自然的对象)的工作方式完全相似。当映射作为函数调用时,它作为映射工作:
user=> (def ob {:foo "bar", :bar :baz, :qwerty 42})
#'user/ob
user=> (ob :foo)
"bar"
因此,Clojure 集可以作为函数调用,并且可以用作成员资格测试,这是有道理的。顺便说一句,如果您使用关键字(那些以冒号开头的东西)作为映射的键,它们也可以用作类似的函数,所以您可以这样做
user=> (:bar ob)
:baz
甚至对于关键字集也是如此:
user=> (def vowel-keywords (set [:a :e :i :o :u]))
#'user/vowel-keywords
user=> (:a vowel-keywords)
:a
user=> (:b vowel-keywords)
nil
但是,同样,后一个技巧仅适用于关键字,不适用于您可能用作映射中的键或集合中的成员的任何其他内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)