anu*_*bis 2 erlang functional-programming
我对我的程序感到害怕:
{ok, [S]} = io:fread("entry: \n", "~s")
Run Code Online (Sandbox Code Playgroud)
但我明白了 {ok, "string"}
我想得到的只是字符串而不是引号.
所以我可以用它:
digraph:add_vertex(G, S)
Run Code Online (Sandbox Code Playgroud)
并接收顶点字符串而不是"字符串"
我怎样才能做到这一点?
这是一种幻觉.引号并不是真的存在.shell或其他显示机制在使用某些上下文呈现时可能会显示它们以表示您正在显示的数据,但在这种情况下,引号实际上只是元数据:
这是你的情况:
1> {ok, [S]} = io:fread("entry: \n", "~s").
entry:
foo
{ok,["foo"]}
Run Code Online (Sandbox Code Playgroud)
如果您严格显示S,您将看到它是一个只有3个字符的列表:
2> io:format("~w~n", [S]).
[102,111,111]
ok
Run Code Online (Sandbox Code Playgroud)
如果你问io:format/2一般显示数据,使用它最好的数据解释表示,它认为'啊哈,这是一个字符串,我将它显示为一个字符串':
3> io:format("~p~n", [S]).
"foo"
ok
4>
Run Code Online (Sandbox Code Playgroud)
字符串显然只是列表,因此在这种情况下,必须决定显示为字符串或列表,并且决定显示为字符串,因为列表字节都表示可打印字符.添加不可打印的字符会改变行为,如下所示:
5> io:format("~p~n", [[2|S]]).
[2,102,111,111]
ok
6>
Run Code Online (Sandbox Code Playgroud)