about summary refs log tree commit diff
path: root/doc/manual/expressions/language-operators.xml
blob: f1f75093461b2cba1d95a4f3045f4c02c90822f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<section xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      version="5.0"
      xml:id="sec-language-operators">

<title>Operators</title>

<para><xref linkend='table-operators' /> lists the operators in the
Nix expression language, in order of precedence (from strongest to
weakest binding).</para>

<table xml:id='table-operators'>
  <title>Operators</title>
  <tgroup cols='3'>
    <thead>
      <row>
        <entry>Syntax</entry>
        <entry>Associativity</entry>
        <entry>Description</entry>
      </row>
    </thead>
    <tbody>
      <row>
        <entry><replaceable>e</replaceable> <literal>.</literal>
        <replaceable>attrpath</replaceable>
        [ <literal>or</literal> <replaceable>def</replaceable> ]
        </entry>
        <entry>none</entry>
        <entry>Select attribute denoted by the attribute path
        <replaceable>attrpath</replaceable> from set
        <replaceable>e</replaceable>.  (An attribute path is a
        dot-separated list of attribute names.)  If the attribute
        doesn’t exist, return <replaceable>def</replaceable> if
        provided, otherwise abort evaluation.</entry>
      </row>
      <row>
        <entry><replaceable>e1</replaceable> <replaceable>e2</replaceable></entry>
        <entry>left</entry>
        <entry>Call function <replaceable>e1</replaceable> with
        argument <replaceable>e2</replaceable>.</entry>
      </row>
      <row>
        <entry><literal>-</literal> <replaceable>e</replaceable></entry>
        <entry>none</entry>
        <entry>Arithmetic negation.</entry>
      </row>
      <row>
        <entry><replaceable>e</replaceable> <literal>?</literal>
        <replaceable>attrpath</replaceable></entry>
        <entry>none</entry>
        <entry>Test whether set <replaceable>e</replaceable> contains
        the attribute denoted by <replaceable>attrpath</replaceable>;
        return <literal>true</literal> or
        <literal>false</literal>.</entry>
      </row>
      <row>
        <entry><replaceable>e1</replaceable> <literal>++</literal> <replaceable>e2</replaceable></entry>
        <entry>right</entry>
        <entry>List concatenation.</entry>
      </row>
      <row>
        <entry>
          <replaceable>e1</replaceable> <literal>*</literal> <replaceable>e2</replaceable>,
          <replaceable>e1</replaceable> <literal>/</literal> <replaceable>e2</replaceable>
        </entry>
        <entry>left</entry>
        <entry>Arithmetic multiplication and division.</entry>
      </row>
      <row>
        <entry>
          <replaceable>e1</replaceable> <literal>+</literal> <replaceable>e2</replaceable>,
          <replaceable>e1</replaceable> <literal>-</literal> <replaceable>e2</replaceable>
        </entry>
        <entry>left</entry>
        <entry>Arithmetic addition and subtraction.  String or path concatenation (only by <literal>+</literal>).</entry>
      </row>
      <row>
        <entry><literal>!</literal> <replaceable>e</replaceable></entry>
        <entry>none</entry>
        <entry>Boolean negation.</entry>
      </row>
      <row>
        <entry><replaceable>e1</replaceable> <literal>//</literal>
        <replaceable>e2</replaceable></entry>
        <entry>right</entry>
        <entry>Return a set consisting of the attributes in
        <replaceable>e1</replaceable> and
        <replaceable>e2</replaceable> (with the latter taking
        precedence over the former in case of equally named
        attributes).</entry>
      </row>
      <row>
        <entry>
          <replaceable>e1</replaceable> <literal>&lt;</literal> <replaceable>e2</replaceable>,
          <replaceable>e1</replaceable> <literal>&gt;</literal> <replaceable>e2</replaceable>,
          <replaceable>e1</replaceable> <literal>&lt;=</literal> <replaceable>e2</replaceable>,
          <replaceable>e1</replaceable> <literal>&gt;=</literal> <replaceable>e2</replaceable>
        </entry>
        <entry>none</entry>
        <entry>Arithmetic comparison.</entry>
      </row>
      <row>
        <entry>
          <replaceable>e1</replaceable> <literal>==</literal> <replaceable>e2</replaceable>,
          <replaceable>e1</replaceable> <literal>!=</literal> <replaceable>e2</replaceable>
        </entry>
        <entry>none</entry>
        <entry>Equality and inequality.</entry>
      </row>
      <row>
        <entry><replaceable>e1</replaceable> <literal>&amp;&amp;</literal>
        <replaceable>e2</replaceable></entry>
        <entry>left</entry>
        <entry>Logical AND.</entry>
      </row>
      <row>
        <entry><replaceable>e1</replaceable> <literal>||</literal>
        <replaceable>e2</replaceable></entry>
        <entry>left</entry>
        <entry>Logical OR.</entry>
      </row>
      <row>
        <entry><replaceable>e1</replaceable> <literal>-></literal>
        <replaceable>e2</replaceable></entry>
        <entry>none</entry>
        <entry>Logical implication (equivalent to
        <literal>!<replaceable>e1</replaceable> ||
        <replaceable>e2</replaceable></literal>).</entry>
      </row>
    </tbody>
  </tgroup>
</table>

</section>