以Erlang格式打印特殊字符

7y4bm7vi  于 2022-12-20  发布在  Erlang
关注(0)|答案(2)|浏览(247)

我是Erlang的新手,我想知道是否有一种方法可以将#这样的特殊字符打印到没有' '的输出中,我想打印#,相关代码是:

case {a(N),b(N)} of
    {false,_} -> {false,'#'};

但输出如下所示:{false,'#'},是否有办法获得#而不是'#'

ibps3vxo

ibps3vxo1#

在Erlang中,单引号用来表示一个原子,所以'#'变成了一个原子而不是特殊字符。
您可能需要考虑使用$#表示#字符或“#”表示字符串(字符串是Erlang中的字符列表)的值。
在这种情况下,{false, $#}将导致{false, 35}(Ascii值为$#)。如果要打印字符,则需要使用io:format。

1> io:format("~c~n",[$#]).
#
ok

如果使用string(字符列表),则:

2> io:format("~s~n",["#"]).
#
ok

其中ok是io:format的返回值。

o0lyfsai

o0lyfsai2#

在你给予的例子中,你没有打印任何东西,你所显示的是shell自动输出的内容:返回最后一条语句的结果。如果你想打印给定格式的东西,你必须调用一个io函数:

1> io:format("~p~n",["#"]). % the pretty print format will show you are printing a string
"#"
ok
2> io:format("~s~n",["#"]). % the string format is used to print strings as text
#
ok
3> io:format("~c~n",[$#]). % the character format is used to print a charater as text 
#
ok
4> io:format("~p~n",[{{false,$#}}]). % note that a character is an integer in erlang.
{{false,35}}
ok
5> io:format("~p~n",[{{false,'#'}}]). % '#' is an atom, not an integer, it cannot be print as # without '
                                      % because it doesn't start by a lower case character, and also
                                      % because # has a special meaning in erlang syntax
{{false,'#'}}
ok
6> io:format("~p~n",[{{false,'a#'}}]).
{{false,'a#'}}
ok
7> io:format("~p~n",[{{false,'ab'}}]).
{{false,ab}}
ok
8> io:format("~p~n",[{{false,a#}}]).  
* 1: syntax error before: '}'
8>

注意,每次shell打印最后一条语句的结果时:io:格式/2返回ok

相关问题