Elixir学习笔记

在京东上搜Elixir,会开掘Elixir是一种琴弦的品牌,不过笔者后天想讲的Elixir是一种编制程序语言。它的Logo如下

Elixir,[ɪ’lɪksər],意为灵丹妙药、圣水,其logo是一枚茶褐水滴

图片 1Elixir

图片 2

一度有学习那门语言的企图,只是工作太多,忙着忙着就忘了。集团方今的技巧分享中,明哥享受了一个有关Phoenix(基于Elixir的Web开拓框架)跟Rails的相比较的话题,重新点燃了自个儿对那门语言的好奇心。接下来让大家一块轻易的来拜谒Elixir那门语言。

Elixir

大家先来拜望官方的批注

Elixir创办人José Valim是ruby界的巨星。
能够把Elixir看作函数式的ruby语言,或许是语法类似ruby的Erlang。
Elixir受瞩指标重大原因,是因为它较好地构成了Erlang编制程序语言的各类优点,
以及ruby那样简单易懂的语法(Erlang语法比较猛烈)。

Elixir is a dynamic, functional language designed for building
scalable and maintainable applications.

Elixir依然一门新硎初试的语言:

Elixir
是一门动态的函数式编制程序语言,重如果用来塑造可扩充,可保险的应用程序。
可以吗,把函数式去掉的话Ruby也能够成功。Ruby是一门动态的命令式编制程序语言,能够用来创设可扩充及可保障的应用程序。唯独Ruby设计的初衷并不是为了缓和哪些难点,它的初心是Happy
Coding!

  • 2014年9月1日临晨,1.0.0rc1发布
  • 2014年9月7日晚,1.0.0rc2发布
  • 二零一六年11月26日,v1.0正经发表
  • 2015年9月28日,v1.1发布
  • 2016年1月1日,v1.2发布
  • 2016年6月2日,v1.3发布

Elixir leverages the Erlang VM, known for running low-latency,
distributed and fault-tolerant systems, while also being successfully
used in web development and the embedded software domain.

Elixir 是一种动态的函数编制程序语言,用来编排可扩充和易于维护的施用。

Elixir运营在Erlang虚构机上,以低负载,布满式和容错系统而名扬四海。已经打响选取在Web开荒世界,以及嵌入式软件领域。那也终于编制程序语言的另叁个更进一步势头呢,除了直接用系统级编制程序语言(如C,C++,Go)来支付编制程序语言,大家还足以在可比早熟的设想系统上组织大家想要的编制程序语言。举个例子JavaVM之上有人发明了Clojure,Scale这一个函数式编制程序语言(身边的人恍如比较喜欢Clojure),而有位Ruby大侠在ErlangVM上实现了Elixir。

函数式编制程序是种编制程序情势,它将微型Computer运算视为函数的猜想。

设置教程未有能比官方文书档案特别详细的了,作者这里就不另行说了,笔者就说说作者在Mac上安装的时候遭受的比较难堪的题目啊。

埃利xir
语言运营在Erlang设想机上的一门新语言,能够很有益于地编写分布式、低顺延和高容错性的系统。

埃利xir是运维在Erlang情状下的编制程序语言,当大家用HomeBrew安装Elixir的时候,它也会趁势帮您安装Erlang。

  • 高并发
  • 高容错性
  • 函数式编程
  • 可扩展

想想比较久在此以前我们用HomeBrew安装了Elixir,以及配套的Erlang情况。然后大家卸载了Elixir,却留下了Erlang。多少个月后我们再次安装Elixir那一年,也配套设置了流行版本的Erlang,于是事故发生了。

设置情形

mac上安装Elixir

自个儿的电脑是mac,所以这里列出mac的装置进度。windows、linux、os的事无巨细安装在法定文书档案有详细表达。

  • 安装erlang

brew install erlang
  • 安装elixir

brew install elixir

在调整台输入elixir
-v能够查阅当前安装的elixir版本(小编这里安装的是时尚版本1.6.1)

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.6.1 (compiled with OTP 20)

设置好埃利xir之后,你有了四个可实行文件:iex,elixir和elixirc。
比方您是用预编写翻译包格局安装的,可以在解压后的bin目录下找到它们。
相互方式,类似于Ruby的irb,便是足以向里面输入任何埃利xir表明式或指令,然后直接观察表达式或指令的结果。
调节台敲命令iex会显示:

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.6.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

如果你用的是Windows,你能够使用iex.bat来步入相互情势

图片 3四个分裂版本的Erlang

永远的hello world

iex(1)> "hello world"
"hello world"
iex(2)> "hello
...(2)> world"
"hellonworld"
iex(3)> "hello" <> " world"
"hello world"

自然,也足以把表明式写进脚本文件,用elixir命令试行它,如:

vim simple.exs #创建一个名字叫simple,以exs结尾的文件
IO.puts "hello word"

然后实施elixir simple.exs就能够在调节台突显hello world了

> erlErlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]Eshell V8.3 (abort with ^G)1>

骨干类型

Elixir重要的焦点项目有:
整型(integer),浮点(float),布尔(boolean),原子(atom,又称symbol符号),
字符串(string),列表(list)和元组(tuple)等。

iex> 1          # integer
iex> 0x1F       # integer
iex> 1.0        # float
iex> true       # boolean
iex> :atom      # atom / symbol
iex> "elixir"   # string
iex> [1, 2, 3]  # list
iex> {1, 2, 3}  # tuple

我们的连串还要保留着多少个版本的Erlang,以及新本子的埃利xir。而系统还暗中同意引用那旧版本的Erlang,那标识了大家会把新本子的Elixir运转在旧版本的Erlang上边,你只怕就能够获得如下错误。

大背头门类

iex(1)> 111
111
> iex2017-11-02 21:54:29 Loading of ~ts failed: ~p "/usr/local/Cellar/elixir/1.5.2/bin/../lib/iex/ebin/Elixir.IEx.CLI.beam" badfile2017-11-02 21:54:29 ~s~n "beam/beam_load.c: Error loading module 'Elixir.IEx.CLI':n mandatory chunk of type 'Atom' not foundnn"2017-11-02 21:54:29 crash_report initial_call: {supervisor_bridge,user_sup,['Argument__1']} pid: <0.47.0> registered_name: [] error_info: {exit,{undef,[{'Elixir.IEx.CLI',start,[],[]},{user_sup,start_user,3,[{file,"user_sup.erl"},{line,100}]},{user_sup,init,1,[{file,"user_sup.erl"},{line,49}]},{supervisor_bridge,init,1,[{file,"supervisor_bridge.erl"},{line,80}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,352}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]} ancestors: [kernel_sup,<0.34.0>] messages: [] links: [<0.35.0>] dictionary: [] trap_exit: true status: running heap_size: 610 stack_size: 27 reductions: 1452017-11-02 21:54:29 supervisor_report supervisor: {local,kernel_sup} errorContext: start_error reason: {undef,[{'Elixir.IEx.CLI',start,[],[]},{user_sup,start_user,3,[{file,"user_sup.erl"},{line,100}]},{user_sup,init,1,[{file,"user_sup.erl"},{line,49}]},{supervisor_bridge,init,1,[{file,"supervisor_bridge.erl"},{line,80}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]} offender: [{pid,undefined},{id,user},{mfargs,{user_sup,start,[]}},{restart_type,temporary},{shutdown,2000},{child_type,supervisor}]2017-11-02 21:54:29 crash_report initial_call: {application_master,init,['Argument__1','Argument__2','Argument__3','Argument__4']} pid: <0.33.0> registered_name: []

浮点类型

iex(2)> 3.14
3.14

那是个谬误示范,只怕你也会遇见类似的标题,报错音讯不会全盘等同,但是相应也大约。究其原因就好像上边所说Eixir版本跟Erlang版本不宽容,当大家想在老版本的Erlang上跑新本子的Elixir就出难点了。

布尔类型

Elixir使用truefalse四个布尔值

iex(3)> true
true
iex(4)> false
false

Elixir提供了相当多用来推断项指标函数,如is_boolean/1函数能够用来检查参数是否布尔型。

在Elixir中,函数通过名称和参数个数(又称元数,arity)来识别。
is_boolean/1意味着名称叫is_boolean,接受贰个参数的函数;
而is_boolean/2代表与其同名、但接受2个参数的分歧函数。(只是打个举例,这样的is_boolean实际上不设有)
另外,<函数名>/<元数>如此的抒发是为了在陈说函数时方便,在实质上程序中一经调用函数,
是不用阐明/1/2的。

iex(1)> is_boolean(true)
true
iex(2)> is_boolean(1)
false

临近的函数还会有is_integer/1is_float/1is_number/1
分别测验参数是还是不是是整型、浮点型只怕双方其一。

消除措施有多少个

原子

原子(atom)是一种常量,名字便是它的值。有个别语言中称其为标识(symbol),比方ruby。

iex(3)> :hello
:hello
iex(4)> :hello == :hi
false

布尔值truefalse实质上便是原子:

iex(5)> true == :true
true
iex(6)> is_atom(false)
true

发表评论

电子邮件地址不会被公开。 必填项已用*标注