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,3
和get_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 設置為
unicode
或latin1
編碼。編碼是在類 Unix 係統上借助LANG
或LC_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_encoding到latin1
.文件也可以在
{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 setopts(Socket, Options)用法及代碼示例
- erlang setelement(Index, Tuple1, Value)用法及代碼示例
- erlang set_token(Token)用法及代碼示例
- erlang self用法及代碼示例
- erlang select(Table, MatchSpec)用法及代碼示例
- erlang select_replace(Table, MatchSpec)用法及代碼示例
- erlang select_reverse(Continuation)用法及代碼示例
- erlang send_request(Node, Module, Function, Args)用法及代碼示例
- erlang seq(From, To)用法及代碼示例
- erlang seed(A1, A2, A3)用法及代碼示例
- erlang select(Tab, Spec)用法及代碼示例
- erlang sin用法及代碼示例
- erlang str用法及代碼示例
- erlang substr用法及代碼示例
- erlang sort用法及代碼示例
- erlang sublist用法及代碼示例
- erlang sum用法及代碼示例
- erlang split_binary用法及代碼示例
- erlang spawn用法及代碼示例
- erlang spawn on Node用法及代碼示例
- erlang spawnlink用法及代碼示例
- erlang safe_fixtable(Table, Fix)用法及代碼示例
- erlang split(Filename)用法及代碼示例
- erlang size(Item)用法及代碼示例
注:本文由純淨天空篩選整理自erlang.org大神的英文原創作品 setopts(Opts) -> ok | {error, Reason}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。