🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
3-基本运算符 ============ 通过前几章的学习,我们知道Elixir提供了 ```+,-,*,/``` 4个算术运算符,外加整数除法函数```div/2```和 取余函数```rem/2```。 Elixir还提供了```++```和```--```运算符来操作列表: ```elixir iex> [1,2,3] ++ [4,5,6] [1,2,3,4,5,6] iex> [1,2,3] -- [2] [1,3] ``` 使用```<>```进行字符串拼接: ```elixir iex> "foo" <> "bar" "foobar" ``` Elixir还提供了三个布尔运算符:```or,and,not```。这三个运算符只接受布尔值作为 *第一个* 参数: ```elixir iex> true and true true iex> false or is_atom(:example) true ``` 如果提供了非布尔值作为第一个参数,会报异常: ```elixir iex> 1 and true ** (ArgumentError) argument error ``` 运算符```or```和```and```可短路,即它们仅在第一个参数无法决定整体结果的情况下才执行第二个参数: ```elixir iex> false and error("This error will never be raised") false iex> true or error("This error will never be raised") true ``` >如果你是Erlang程序员,Elixir中的```and```和```or```其实就是```andalso```和```orelse```运算符。 除了这几个布尔运算符,Elixir还提供```||```,```&&```和```!```运算符。它们可以接受任意类型的参数值。 在使用这些运算符时,除了 false 和 nil 的值都被视作 true: ```elixir # or iex> 1 || true 1 iex> false || 11 11 # and iex> nil && 13 nil iex> true && 17 17 # ! iex> !true false iex> !1 false iex> !nil true ``` 根据经验,当参数确定是布尔时,使用```and```,```or```和```not```; 如果非布尔值(或不确定是不是),用```&&```,```||```和```!```。 Elixir还提供了 ```==,!=,===,!==,<=,>=,<,>``` 这些比较运算符: ```elixir iex> 1 == 1 true iex> 1 != 2 true iex> 1 < 2 true ``` 其中```==```和```===```的不同之处是后者在判断数字时更严格: ```elixir iex> 1 == 1.0 true iex> 1 === 1.0 false ``` 在Elixir中,可以判断不同类型数据的大小: ```elixir iex> 1 < :atom true ``` 这很实用。排序算法不必担心如何处理不同类型的数据。总体上,不同类型的排序顺序是: ``` number < atom < reference < functions < port < pid < tuple < maps < list < bitstring ``` 不用强记,只要知道有这么回事儿就可以。