有帮助吗?

解决方案

可以与 shell:strings/1功能使用Erlang R16B开始禁用这样的行为。

请记住,这是全球性的选择对所有节点壳,它可能是明智的,设置回整理后打是壳牌在不在人世节点。

其他提示

我不知道是否可以更改 shell 的默认行为,但您至少可以使用正确格式化输出 io:格式.

这是一个例子:

1> io:format("~p~n", [[65, 66, 67]]).
"ABC"
ok
2> io:format("~w~n", [[65, 66, 67]]).
[65,66,67]
ok

并且由于外壳仅用于实验/维护, io:format() 应该至少足以满足您的实际应用。也许您还应该考虑编写自己的格式/打印方法,例如 formatPerson() 或类似的东西,可以很好地格式化所有内容。

我倾向于通过预先的原子到我在壳列表做到这一点。

例如:

Eshell V5.7.4  (abort with ^G)
1> [65,66,67].
"ABC"
2> [a|[65,66,67]].
[a,65,66,67]

也可以是并[a,65,66,67],当然。但[A | fun_that_returns_a_list()]将打印 “正确的事(ISH)的大部分时间”

从 Erlang/OTP R16B 开始, ,您可以使用该功能 外壳:字符串/1 打开或关闭此功能。请注意,它还会影响实际上应该是字符串的内容的打印,例如 "foo" 在以下示例中:

1> {[8,9,10], "foo"}.
{"\b\t\n","foo"}
2> shell:strings(false).
true
3> {[8,9,10], "foo"}.   
{[8,9,10],[102,111,111]}

没有,没有办法将其禁用。最好的选择,我觉得是在查询(用io:format),或在事后明确地打印出值做:io:format("~w\n", [v(-1)])

我不认为你可以阻止它。 前面加上一个原子似乎是一个组装机 - 它不改变原来的字符串

我通常使用列表:弄平(字符串)迫使它为一个字符串 - 尤其io_lib的返回值:格式()不总是打印为字符串。使用列表:弄平()上它使得一个

我使用下面的 “C风格”:

sprintf(Format) ->
     sprintf(Format, []).
sprintf(Format, Args) ->
    lists:flatten(io_lib:format(Format, Args)).

的问题是,该字符串不是Erlang中一个类型。字符串就是一个整数列表,所以没有办法为外壳,以打印字符串从一个普通的列表区分。不知道这样的回答你的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top