这是我试图为Elixir 1.0.3运行的程序:
IO.puts "putstest"
div2 = fn inputnum ->
[:a, inputnum/4, inputnum/7, inputnum/5.0, inputnum/7, inputnum*88]
end
myoutput = div2.(300.0)
IO.puts myoutput
我添加了:一个原子,以防Elixir进行某种隐式转换。
我是Elixir的新手。当我通过$ elixir putztestzorz.exs
运行上面的代码时,我一直收到以下错误:
putstest
** (ArgumentError) argument error
(stdlib) :io.put_chars(#PID<0.24.0>, :unicode, [[:a, 75.0, 42.857142857142854, 60.0, 42.857142857142854, 2.64e4], 10])
(elixir) lib/code.ex:316: Code.require_file/2
我检查了http://elixir-lang.org/docs/master/elixir/IO.html处的文档,但 IO.stream (将io设备转换为IO.Stream,将最后一行更改为IO.stream output
)和< strong> IO.write (将给定参数写入给定设备,将最后一行更改为IO.write :stdout, output
)似乎可以解决问题。
我不想只是猜测,在这里,我似乎不太明白该函数应该做什么。
是否有类似于Python的print()
,只是,工作?
我需要播放列表,还是其他什么?
我可能在这里遗漏了一些非常简单的东西,但我不想只是在IO处理函数列表中猜测。
(PS文档一直在讨论Process.group_leader
。我不打算对此做很多事情,但是有没有办法把它放在这种事情的上下文中?我一直在想象{{ 3}}来自星球大战。)
答案 0 :(得分:16)
问题是IO.puts
无法处理任意列表,因此ArgumentError
。它可以处理的唯一类型的列表是字符列表或单引号字符串。这就是函数成功匹配list参数的原因,但后来在库内深处爆炸。你基本上有两种选择:
使用IO.inspect
快速调试任何值到stdout。
IO.inspect myoutput
与Erlang的for
一起使用:io.format
理解来明确格式化输出,就像printf一样。 :a
可能会抛出错误,但如果删除它,则以下内容应该有效:
for x <- myoutput do
:io.format "~.2f~n", [x]
end
请注意~.2f
打印逗号后面两位数的值。 ~n
添加换行符。