Tus*_*ani 0 erlang erlang-shell
我一直试图解决问题几个小时,对erlang来说很新
lists:sublist([6,9,15,24,39,6,96],7,1).
Run Code Online (Sandbox Code Playgroud)
我希望这打印"100"而不是"d"
我在这里做错了什么?
只要合法,shell就会尝试将字符串打印为字符串.这意味着所有有效字符的整数列表将打印为字符,包含其他内容的列表将打印为列表:
1> [65,66,67].
"ABC"
2> [3,65,66,67].
[3,65,66,67]
Run Code Online (Sandbox Code Playgroud)
但请注意,我实际上并没有调用任何输出函数.这只是shell的方便操作,隐式回显任何返回值,所以作为程序员,你可以检查它.
如果我想显式调用输出函数,我应该使用一个格式字符串来指定要插值的值的性质:
3> io:format("This is a list: ~tw~n", [List]).
This is a list: [65,66,67]
ok
4> io:format("This is a list rendered as an implied string: ~tp~n", [List]).
This is a list rendered as an implied string: "ABC"
ok
5> io:format("This is a string: ~ts~n", [List]).
This is a string: ABC
ok
Run Code Online (Sandbox Code Playgroud)
请注意ok每次打印后的附加原子.那是因为来自的返回值io:format/2是ok.所以我们从中获取显式输出format/2,然后查看其返回值.
io模块文档页面有详尽的细节:http://erlang.org/doc/man/io.html#format-1
回到你的例子......
6> lists:sublist([6,9,15,24,39,6,96],7,1).
"`"
7> io:format("~tw~n", [lists:sublist([6,9,15,24,39,6,96],7,1)]).
[96]
ok
Run Code Online (Sandbox Code Playgroud)
附录
有一个调用的设置shell:strings/1告诉shell打开和关闭字符串格式:
1> [65,66,67].
"ABC"
2> shell:strings(false).
true
3> [65,66,67].
[65,66,67]
4> <<65,66,67>>.
<<65,66,67>>
5> shell:strings(true).
false
6> <<65,66,67>>.
<<"ABC">>
Run Code Online (Sandbox Code Playgroud)
但由于以下几个原因,我不再使用此设置了:
io或io_lib模块的实际输出函数,并且围绕格式字符串开发习惯比担心shell的便利输出更有用.