當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


erlang setopts(Opts)用法及代碼示例

setopts(Opts) -> ok | {error, Reason}
setopts(IoDevice, Opts) -> ok | {error, Reason}
類型:
IoDevice = device()
Opts = [setopt()]
Reason = term()

設置標準 I/O 設備 (IoDevice) 的選項。

可能的選項和值因 I/O 設備而異。要獲取特定 I/O 設備上支持的選項及其當前值的列表,請使用函數getopts/1.

OTP I/O 設備支持的選項和值如下:




binary, list, or {binary, boolean()}

如果設置為二進製模式(binary或者{binary, true}),I/O 服務器發送二進製數據(以 UTF-8 編碼)作為對get_line,get_chars,並且,如果可能的話,get_until請求(有關詳細信息,請參閱部分Erlang I/O 協議)在用戶指南中)。立竿見影的效果就是get_chars/2,3get_line/1,2返回受影響 I/O 設備的 UTF-8 二進製文件而不是字符列表。

默認情況下,OTP 中的所有 I/O 設備均設置為 list 模式。但是,I/O 函數可以處理任何這些模式,因此其他 user-written 模塊也應該充當 I/O 服務器的客戶端。

標準 shell ( group.erl )、'oldshell' ( user.erl ) 和文件 I/O 服務器支持此選項。


{echo, boolean()}

表示終端是否回顯輸入。僅支持標準 shell I/O 服務器 (group.erl)


{expand_fun, expand_fun()}

為 tab-completion(擴展)提供類似 Erlang shell 的函數。當用戶按下按鈕時調用此函數標簽鑰匙。當調用 line-reading 函數時,擴展處於活動狀態,例如get_line/1,2.

該函數以當前行(直到光標)作為反轉字符串調用。它返回一個三元組:{yes|no, string(), list()}。第一個元素會發出蜂鳴聲,如果no,否則展開是靜默的;第二個是將在光標位置輸入的字符串;第三個是可能的擴展列表。如果此列表不為空,則將其打印在當前輸入行下方。可能的擴展列表可以以不同的方式格式化,以使更高級的擴展建議對用戶來說更容易閱讀,請參閱 edlin_expand:expand/2的文檔。

簡單的示例(除了空行之外的任何內容都會發出蜂鳴聲,空行會擴展為 "quit" ):

fun("") -> {yes, "quit", []};
   (_) -> {no, "", ["quit"]} end

此選項僅受標準 shell (group.erl) 支持。


{encoding, latin1 | unicode}

指定字符如何從 I/O 設備輸入或輸出到 I/O 設備,這意味著,例如,將終端設置為處理 Unicode 輸入和輸出,或者將文件設置為處理 UTF-8 數據編碼。

該選項不影響數據從 I/O 函數返回的方式或如何在 I/O 協議中發送數據,它僅影響 I/O 設備如何處理 "physical" 設備的 Unicode 字符。

係統啟動時,標準 shell 設置為 unicodelatin1 編碼。編碼是在類 Unix 係統上借助 LANGLC_CTYPE 環境變量設置的,或者在其他係統上通過其他方式設置的。因此,用戶可以輸入 Unicode 字符,並且如果 I/O 設備支持,則 I/O 設備處於 {encoding, unicode} 模式。如果運行時係統的假設錯誤,可以通過設置此選項來更改模式。

注意

在 OTP 26.0 之前,當 Erlang 啟動時-oldshell或者-noshell標誌(例如,在escript),默認編碼為 standard_io被設置為latin1,這意味著任何大於代碼點 255 的字符都被轉義,並且輸入預計為純 8 位 ISO Latin-1。自 OTP 26.0 起,standard_io始終默認為unicode如果支持,否則latin1.

如果您想發送原始字節standard_io,您現在總是需要顯式地將編碼設置為latin1;否則,代碼點 128-255 將轉換為 UTF-8。最好通過設置內核配置參數來完成此操作standard_io_encodinglatin1.

文件也可以在 {encoding, unicode} 中設置,這意味著數據以 UTF-8 格式寫入和讀取。文件可以有更多編碼,請參見下文。

標準 shell(group.erl 包括 Windows 上的 werl)、'oldshell' (user.erl) 和文件 I/O 服務器均支持 {encoding, unicode | latin1}


{encoding, utf8 | utf16 | utf32 | {utf16,big} | {utf16,little} | {utf32,big} | {utf32,little}}

對於磁盤文件,編碼可以設置為各種 UTF 變體。其效果是,數據預計以指定的編碼從文件中讀取,並且數據以指定的編碼寫入磁盤文件。

{encoding, utf8} 對文件具有與 {encoding, unicode} 相同的效果。

擴展編碼僅在磁盤文件上受支持(通過函數打開) file:open/2)。

相關用法


注:本文由純淨天空篩選整理自erlang.org大神的英文原創作品 setopts(Opts) -> ok | {error, Reason}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。