Skip to content

Selecting Array literals

(arr) selects array literals and, optionally, their elements. It has the following signature:

clojure
(arr [elems?])
(arr [elems?])

In its bare form, (arr) will match any array literals, like [], [a], or [...x]:

clojure
(arr)
(arr)

To specify constraints for the elements of an array literal, the (el) selector can be used, which has the following signature:

clojure
(el [pos?] [val])
(el [pos?] [val])

Using what we learned in the previous chapter on literals, the following query selects array literals that have a number for their first element, like [42]:

clojure
(arr (el 1 (num)))
(arr (el 1 (num)))

Conversely, when we don't care about the position of the element, only its type or value, we may use the placeholder atom to disregard its position:

clojure
(arr (el _ (num)))
(arr (el _ (num)))

Which will match [77, 'a'] and ['a', 77] but not ['a'].

Array literals vs. instances

As was the case with the (regex) selector, (arr) will not select non-literal Arrays created through calls to one of the Array methods like Array.from() or its constructor like new Array(1,2).

Copyright © 2022-present Semantic Works, Inc.