簡體   English   中英

Clojure,對某些功能沉思

[英]Clojure, musings on some function

我在repl(lein-repl和光照表)周圍玩耍,發現使用some函數有些奇怪:

(def my-vec [5 :test])
(some even? my-vec)     
;=>  java.lang.IllegalArgumentException: Argument must be an integer: :test
;            core.clj:1351 clojure.core/even?
;            core.clj:2515 clojure.core/some

(some odd? my-vec)      ;=> true
(some integer? my-vec)  ;=> true
(some map? my-vec)      ;=> nil

(def my-vec2 [4 :test])
(some even? my-vec2)     ;=> true
(some odd? my-vec2) 
;=> java.lang.IllegalArgumentException: Argument must be an integer: :test
;            core.clj:1351 clojure.core/even?
;            core.clj:1357 clojure.core/odd?
;            core.clj:2515 clojure.core/some

(some integer? my-vec)  ;=> true
(some map? my-vec)      ;=> nil

some的文檔說:

some
clojure.core
([pred coll])
Returns the first logical true value of (pred x) for any x in coll,
  else nil.  One common idiom is to use a set as pred, for example
  this will return :fred if :fred is in the sequence, otherwise nil:
  (some #{:fred} coll)

為什么我會收到有關帶有奇數/偶數的整數的錯誤? 當它不在向量中時? 它不應該返回nil嗎?

有些人會將謂詞應用於集合的每個元素,直到獲得真實值為止。

如果是

(some even? [5 :test])

some會嘗試

(even? 5) ;=> false

接着

(even? :test) ;=> Exception...

even? 需要一個整數。

試試吧

(some (every-pred integer? even?) [5 :test])
;=> nil

(some (every-pred integer? even?) [5 6 :test])
;=> true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM