Elixir iodata和chardata

2023-12-15 14:23 更新

在上面的所有例子中,我們都使用二進制數(shù)來寫入文件.在"二進制數(shù),字符串和字符列表"那一章中,我們提到了字符串僅僅是字節(jié)而字符列表是代碼點組成的列表.

IOFile模塊中函數(shù)允許將列表作為參數(shù).而且,他們也支持由列表,整數(shù)和二進制數(shù)混合而成的列表:

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

然而,需要注意的是,一個列表有可能是一串字節(jié)或者一串字符,而這取決于IO設備的編碼.如果文件打開時沒有指定編碼,那么就是以生模式打開,而且必須使用IO模塊中以bin*開頭的函數(shù).這些函數(shù)需要一個iodata作為參數(shù);它們需要一個代表字節(jié)和二進制數(shù)的整數(shù)列表.

另一方面,能夠使用IO模塊中的其它函數(shù)處理:stdio和以:utf8編碼打開的文件.這些函數(shù)需要一個char_data作為參數(shù),也就是一個字符或字符串的列表.

如果你想把一個列表傳遞給這些函數(shù),你唯一要關心的就是這些微妙的差別.二進制數(shù)已經(jīng)由字節(jié)來表示,因此,它們的屬性是"生的".

關于IO設備和IO相關函數(shù)的介紹到此結束.我們已經(jīng)學習了四個Elixir模塊--IO,File,PathStringIO,也學習了虛擬機是如何使用進程來從底層支持IO機制的,以及在IO操作中如何使用chardataiodata.


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號