【问题标题】:Basic Printing with Elixir - IO.puts error: ** (ArgumentError) argument error (stdlib) :io.put_chars(#PID使用 Elixir 进行基本打印 - IO.puts 错误:** (ArgumentError) 参数错误 (stdlib) :io.put_chars(#PID
【发布时间】:2020-02-11 00:56:09
【问题描述】:

这是我尝试为 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

我添加了 :a 原子以防 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

我检查了the IO documentation,但没有IO.stream(将io设备转换为IO.Stream,将最后一行更改为IO.stream output)也没有IO.write(将给定参数写入给定设备,将最后一行更改为IO.write :stdout, output)似乎可以解决问题。

我不想在这里继续猜测,而且我似乎不太明白该函数应该做什么。

是否有类似于 Python 的 print() 的类似物工作

我需要投射列表吗?

我可能在这里遗漏了一些非常简单的东西,但我不想只是在 IO 处理函数列表中猜测我的方式。

(P.S. 文档一直在谈论 Process.group_leader。我还没有计划对此做太多事情,但是有没有办法将它放在这类事情的上下文中?我一直在想象 Red Leader 来自星球大战。)

【问题讨论】:

    标签: io type-conversion elixir


    【解决方案1】:

    问题是IO.puts 不能处理任意列表,因此ArgumentError。它可以处理的唯一列表类型是字符列表或单引号字符串。这就是函数成功匹配列表参数但后来在库内部深处爆炸的原因。你基本上有两种选择:

    使用IO.inspect 快速调试任何值到标准输出。

    IO.inspect myoutput
    

    使用 for 理解和 Erlang 的 :io.format 来明确格式化输出,就像 printf。 :a 可能会抛出一个错误,但如果你删除它,以下应该可以工作:

    for x <- myoutput do
      :io.format "~.2f~n", [x]
    end
    

    请注意,~.2f 会打印逗号后两位数字的值。 ~n 添加换行符。

    【讨论】:

    • 另外,很高兴知道您可以在字符串插值中进行检查,即 IO.puts "here is a list: #{inspect mylist}"
    • 试过 IO.inspect。它输出如下: $ elixir putztestzorz.exs putstest [:a, 75.0, 42.857142857142854, 60.0, 42.857142857142854, 2.64e4] 应该只用于调试吗?
    • 是的,IO.inspect 用于调试 - 一般来说,Elixir 无法判断您希望如何表示数据,IO.inspect 只会产生一些默认表示。如果您需要特定的输出格式,则需要编写一些生成它的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2021-05-17
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多