文档章节

elixir官方入门教程 基本操作符

ljzn
 ljzn
发布于 2016/08/02 11:44
字数 611
阅读 32
收藏 0

#基本操作符

在上一个章节,我们看到Elixir提供了+-*/作为算数操作符,还有函数div/2rem/2用于获得整数形式的商和余数。

Elixir也提供了对列表的++--操作:

iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
iex> [1, 2, 3] -- [2]
[1, 3]

字符串连接符是<>

iex> "foo" <> "bar"
"foobar"

Elixir也提供了三个布尔操作符:orandnot。这些操作符要求以布尔类型作为其弟一个参数:

iex> true and true
true
iex> false or is_atom(:example)
true

若第一个参数不是布尔类型则会抛出异常:

iex> 1 and true
** (ArgumentError) argument error: 1

orand是短路运算符。它们在左边不足够确定结果时才会执行右边:

iex> false and raise("This error will never be raised")
false

iex> true or raise("This error will never be raised")
true

注意:如果你是一名Erlang开发者,Elixir中的andor对应着Erlang中的andalsoorelse运算符。

除此之外,Elixir也提供||&&!操作符,它们接受任何形式的参数。在这些操作符中,除了falsenil之外的值都会被认定为真:

# 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

推荐的做法是,当你期望布尔型时使用andornot。如果参数不是布尔型,那么使用||&&!

Elixir也提供了==!====!==<=>=<>作为比较运算符:

iex> 1 == 1
true
iex> 1 != 2
true
iex> 1 < 2
true

=====的区别在于后者对于整数和浮点数的比较更加严格:

iex> 1 == 1.0
true
iex> 1 === 1.0
false

在Elixir中,我们可以比较不同的数据类型:

iex> 1 < :atom
true

这是处于实用角度考虑。排序算法不用再担心不同的数据类型。排序定义如下:

number < atom < reference < functions < port < pid < tuple < maps < list < bitstring

你不必记住这个顺序,但需要知道它的存在。

#操作符表

OPERATOR	ASSOCIATIVITY
@	            Unary
.	            Left to right
+ - ! ^ not ~~~	    Unary
* /	            Left to right
+ -	            Left to right
++ -- .. <>	    Right to left
in	            Left to right
|> <<< >>> ~>> <<~ ~> <~ <~> <|>	Left to right
< > <= >=	    Left to right
== != =~ === !==	Left to right
&& &&& and	    Left to right
|| ||| or	    Left to right
=	            Right to left
=>	            Right to left
|	            Right to left
::	            Right to left
when	            Right to left
<-, \\	            Left to right
&	            Unary

这些操作符中的大部分会在我们的教程中学习到。在下一章,我们将讨论一些基本函数,数据类型转换和一点点控制流。

© 著作权归作者所有

ljzn
粉丝 30
博文 69
码字总数 96245
作品 0
南平
程序员
私信 提问
Elixir 学习资源

Elixir 官网 getting started官方入门学习资源 官方文档 hex 包管理系统 elixir sips 比较不错视频课程 Elixir China 中文论坛 官方wiki Elixir by Example Awesome Elixir Elixir Quiz 通过...

lidashuang
2017/11/29
0
0
elixir官方入门教程 介绍

介绍 安装 交互模式 运行脚本 提出疑问 欢迎! 在本教程中我们将教给你Elixir的基础,语法,如何定义模块,如何操作常用数据结构的特性等等.本章将确保Elixir安装好了,并且你能够成功运行Elixir的...

ljzn
2016/08/06
70
0
elixir官方入门教程 学习资料

下一步该去哪 构建你的第一个Elixir项目 元编程 社区与其它资源 Erlang基础 想要学习更多?继续阅读! 构建你的第一个Elixir项目 为了开始你的第一个项目,Elixir装载了一个叫做Mix的构建工具....

ljzn
2016/08/06
144
0
Elixir学习笔记(基本操作、Enum板块)

基本操作 算数运算 Elixir 支持基本的 、、、操作符,不过要注意 的结果是浮点数。 10 / 2返回了一个浮点型的5.0而非整型的5,这是因为在Elixir中,运算符总是返回浮点型数值。 如果你需要整...

程序员小哥哥
2018/04/11
0
0
Elixir学习笔记(模型匹配、控制语句)

模型匹配 模式匹配是 Elixir 很强大的特性,它允许我们匹配简单值、数据结构、甚至函数。 匹配运算符 在Elixir中,运算符实际上叫做 匹配运算符。通过这个匹配操作符,我们可以赋值和匹配值。...

程序员小哥哥
2018/04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis缓存穿透、缓存雪崩和缓存击穿

Redis缓存穿透、缓存雪崩 缓存雪崩,是指在某一个时间段,缓存集中过期失效。 产生雪崩的原因之一,比如在写本文的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品时间比较集中...

architect刘源源
14分钟前
1
1
ArrayList源码分析

一、核心变量 // 序列化ID private static final long serialVersionUID = 8683452581122892189L; // 默认初始化容量 private static final int DEFAULT_CAPACITY = 10; ......

星爵22
23分钟前
1
0
++a a++的再次理解

public class Test { //// public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub int a=1; int b=2; int c; int d; c=......

南桥北木
24分钟前
0
0
整合Spring和SpringMVC

1.Spring容器和SpringMVC容器的关系 Spring容器是一个父容器,SpringMVC容器是一个子容器,它继承自Spring容器。因此,在SpringMVC容器中,可以访问到Spring容器中定义的Bean,而在Spring容器...

薛小二
24分钟前
0
0
递归实现后序遍历二叉树

问题描述 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行后序遍历,然后将遍历结果打印输出。要求采用递归方法实现。 解题思路 递归实现 程序实现 ...

niithub
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部