Update docs on unquote-splice
This commit is contained in:
parent
a0224ef8bd
commit
dbffe987f5
@ -1604,19 +1604,31 @@ unquote-splice
|
|||||||
--------------
|
--------------
|
||||||
|
|
||||||
``unquote-splice`` forces the evaluation of a symbol within a quasiquoted form,
|
``unquote-splice`` forces the evaluation of a symbol within a quasiquoted form,
|
||||||
much like ``unquote``. ``unquote-splice`` can only be used when the symbol
|
much like ``unquote``. ``unquote-splice`` can be used when the symbol
|
||||||
being unquoted contains an iterable value, as it "splices" that iterable into
|
being unquoted contains an iterable value, as it "splices" that iterable into
|
||||||
the quasiquoted form. ``unquote-splice`` is aliased to the ``~@`` symbol.
|
the quasiquoted form. ``unquote-splice`` can also be used when the value
|
||||||
|
evaluates to a false value such as ``None``, ``False``, or ``0``, in which
|
||||||
|
case the value is treated as an empty list and thus does not splice anything
|
||||||
|
into the form. ``unquote-splice`` is aliased to the ``~@`` syntax.
|
||||||
|
|
||||||
.. code-block:: clj
|
.. code-block:: clj
|
||||||
|
|
||||||
(def nums [1 2 3 4])
|
(def nums [1 2 3 4])
|
||||||
(quasiquote (+ (unquote-splice nums)))
|
(quasiquote (+ (unquote-splice nums)))
|
||||||
;=> (u'+' 1L 2L 3L 4L)
|
;=> ('+' 1 2 3 4)
|
||||||
|
|
||||||
`(+ ~@nums)
|
`(+ ~@nums)
|
||||||
;=> (u'+' 1L 2L 3L 4L)
|
;=> ('+' 1 2 3 4)
|
||||||
|
|
||||||
|
`[1 2 ~@(if (< (nth nums 0) 0) nums)]
|
||||||
|
;=> ('+' 1 2)
|
||||||
|
|
||||||
|
Here, the last example evaluates to ``('+' 1 2)``, since the condition
|
||||||
|
``(< (nth nums 0) 0)`` is ``False``, which makes this ``if`` expression
|
||||||
|
evaluate to ``None``, because the ``if`` expression here does not have an
|
||||||
|
else clause. ``unquote-splice`` then evaluates this as an empty value,
|
||||||
|
leaving no effects on the list it is enclosed in, therefore resulting in
|
||||||
|
``('+' 1 2)``.
|
||||||
|
|
||||||
when
|
when
|
||||||
----
|
----
|
||||||
|
Loading…
x
Reference in New Issue
Block a user