在 Erlang VM 上构建 Elixir 的好处之一就是已经有大量的库可以供我们使用。互操作性允许我们在 Elixir 代码中直接使用 Erlang 的标准库和三方库。
目录
- 标准库
- Erlang 三方依赖
- 区别
- 原子
- 字符串
- 变量
标准库
在任何 Elixir 代码中都能直接使用 Erlang 提供额标准库,Erlang 的模块用小写的原子变量标识,比如:os
和 :timer
。
我们可以用 timer.tc
计算某个函数执行的时间:
defmodule Example do
def timed(fun, args) do
{time, result} = :timer.tc(fun, args)
IO.puts("Time: #{time} μs")
IO.puts("Result: #{result}")
end
end
iex> Example.timed(fn (n) -> (n * n) * n end, [100])
Time: 8 μs
Result: 1000000
要了解所有可用的模块,请看 Erlang 参考手册。
Erlang 三方依赖
引入 Erlang 的依赖,同 Mix 引入依赖,如果依赖的库不在 hex,你也可以直接使用 git 代码库的地址:
def deps do
[{:png, github: "yuce/png"}]
end
然后我们就可以使用 Erlang 的库了。
png =
:png.create(%{:size => {30, 30}, :mode => {:indexed, 8}, :file => file, :palette => palette})
区别
知道怎么在 Elixir 中使用 Erlang ,我们还要讲讲操作 Erlang 语言会遇到的坑:
原子
Erlang 的原子和 Elixir 很相似,只是没有前面的冒号(:),Erlang 中的原子是小写字母和下划线的组合。
Elixir:
:example
Erlang:
example.
字符串
Erlang字符串用单引号表示,很像Elixir的字符列表。除了代表 Erlang 的字符列表之外,字符列表在和 Erlang 代码交互的时候经常会用到。
Elixir:
"Example String"
Erlang:
'Example String'.
有些 Erlang 的库不支持 binaries ,我们要把 Elixir 字符串转换成自古列表,不过 to_charlist/1
函数可以帮我们完成这个转换。
iex> :string.words("Hello World")
** (FunctionClauseError) no function clause matching in :string.strip_left/2
The following arguments were given to :string.strip_left/2:
# 1
"Hello World"
# 2
32
(stdlib) string.erl:1661: :string.strip_left/2
(stdlib) string.erl:1659: :string.strip/3
(stdlib) string.erl:1597: :string.words/2
iex> "Hello World" |> to_charlist() |> :string.words()
2
变量
Elixir:
iex> x = 10
10
iex> x1 = x + 10
20
Erlang:
1> X = 10.
10
2> X1 = X + 1.
11
网友评论