Clojure:找出一个集合是否可以选择

Kur*_*out 13 clojure clojureclr

所以有列表?,seq?,vector ?, map?等等以确定参数的集合类型.

什么是区分它们的好方法

  • 地图(即包含键值对的内容)
  • 集合(即包含值的东西)
  • 像字符串一样的非集合值.

有没有比这更好的方法

#(or (seq? %) (list? %) etc)
Run Code Online (Sandbox Code Playgroud)

Art*_*ldt 9

使用seq?就像它得到的那样简洁干净.

clojure.contrib.core定义:

seqable?
    function
    Usage: (seqable? x)
    Returns true if (seq x) will succeed, false otherwise.

http://clojure.github.com/clojure-contrib/core-api.html

它做了你提出的一个重要的or声明

  • 已经是seq
  • clojure.lang.Seqable的一个实例
  • 可迭代的实例
  • 数组
  • 一个字符串
  • java.util.Map的一个实例


sta*_*afl 5

让我们不要忘记sequential?

user=> (sequential? [])
true
user=> (sequential? '())
true
user=> (sequential? {:a 1})
false
user=> (sequential? "asdf")
false
Run Code Online (Sandbox Code Playgroud)