Elixir iodata和chardata

2023-12-15 14:23 更新

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

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.


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号