Functional programming 如何使用fread在Erlang中获取不带“的字符串&引用;

Functional programming 如何使用fread在Erlang中获取不带“的字符串&引用;,functional-programming,erlang,Functional Programming,Erlang,我的计划中有一个fread: {ok, [S]} = io:fread("entry: \n", "~s") 但是我得到了{ok,“string”} 我只想得到字符串,而不是引号 因此,我可以将其用于: digraph:add_vertex(G, S) 并接收顶点字符串而不是“字符串” 我该怎么做呢?这是一种错觉。引号实际上并不存在。shell或其他显示机制在使用特定上下文呈现时可能会显示它们,以表示正在显示的数据,但本例中的引号实际上只是元数据: 这是您的案例: 1> {ok, [S

我的计划中有一个fread:

{ok, [S]} = io:fread("entry: \n", "~s")
但是我得到了
{ok,“string”}

我只想得到字符串,而不是引号

因此,我可以将其用于:

digraph:add_vertex(G, S)
并接收顶点字符串而不是“字符串”


我该怎么做呢?

这是一种错觉。引号实际上并不存在。shell或其他显示机制在使用特定上下文呈现时可能会显示它们,以表示正在显示的数据,但本例中的引号实际上只是元数据:

这是您的案例:

1> {ok, [S]} = io:fread("entry: \n", "~s").
entry: 
foo
{ok,["foo"]}
如果严格显示S,您将看到它是一个只有3个字符的列表:

2> io:format("~w~n", [S]).                 
[102,111,111]
ok
如果您要求io:format/2以一般方式显示数据,使用它对数据解释的最佳表示,它会认为‘啊哈,这是一个字符串,我将它显示为字符串’:

3> io:format("~p~n", [S]).
"foo"
ok
4> 
字符串显然只是列表,因此在这种情况下,必须决定显示为字符串或列表,并决定显示为字符串,因为列表字节都表示可打印字符。因此,添加不可打印字符将改变行为,如下所示:

5> io:format("~p~n", [[2|S]]).  
[2,102,111,111]
ok
6> 

您的问题是否意味着您可能想要atom而不是字符串?如果您想要打印不带引号的字符串,可以使用~s格式:
io:format(“~s~n”,[“Hello”])。