codecamp

Elixir 理解别名

这时,你可能会想知道:究竟什么是Elixir中的别名,它是如何运作的?

Elixir中的别名是首字母大写的id(例如String,Keyword等等),在编译时会被转化成原子.举个例子,String别名默认转化成原子:"Elixir.String":

iex> is_atom(String)
true
iex> to_string(String)
"Elixir.String"
iex> :"Elixir.String" == String
true

使用​alias/2​命令,我们可以简单地修改别名要转化成的原子.

别名转化成原子是因为在Erlang虚拟机中模块总是用原子来代表.例如,这是我们调用Erlang模块的机制:

iex> :lists.flatten([1, [2], 3])
[1, 2, 3]

这也是我们之所以能动态地在一个模块中调用给定的函数:

iex> mod = :lists
:lists
iex> mod.flatten([1, [2], 3])
[1, 2, 3]

我们简单地使用原子​:list​调用了函数​flatten.


Elixir 使用
Elixir 模块嵌套
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Elixir 基本操作符

Elixir 二进制,字符串和字符列表

Elixir 类型规格与行为

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }