Elixir iodata和chardata

2023-12-15 14:23 更新

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

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

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

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

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

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

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)