codecamp

Elixir iodata和chardata

在上面的所有例子中,我们都使用二进制数来写入文件.在"二进制数,字符串和字符列表"那一章中,我们提到了字符串仅仅是字节而字符列表是代码点组成的列表.

IOFile模块中函数允许将列表作为参数.而且,他们也支持由列表,整数和二进制数混合而成的列表:

iex> IO.puts 'hello world'
hello world
:ok
iex> IO.puts ['hello', ?\s, "world"]
hello world
:ok

然而,需要注意的是,一个列表有可能是一串字节或者一串字符,而这取决于IO设备的编码.如果文件打开时没有指定编码,那么就是以生模式打开,而且必须使用IO模块中以bin*开头的函数.这些函数需要一个iodata作为参数;它们需要一个代表字节和二进制数的整数列表.

另一方面,能够使用IO模块中的其它函数处理:stdio和以:utf8编码打开的文件.这些函数需要一个char_data作为参数,也就是一个字符或字符串的列表.

如果你想把一个列表传递给这些函数,你唯一要关心的就是这些微妙的差别.二进制数已经由字节来表示,因此,它们的属性是"生的".

关于IO设备和IO相关函数的介绍到此结束.我们已经学习了四个Elixir模块--IO,File,PathStringIO,也学习了虚拟机是如何使用进程来从底层支持IO机制的,以及在IO操作中如何使用chardataiodata.


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; }