当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。