【问题标题】:Understanding Elixir output [duplicate]了解 Elixir 输出 [重复]
【发布时间】:2020-05-08 13:39:35
【问题描述】:

我目前正在学习 Elixir 并完成“Programming Elixir 1.6”一书中的所有练习。 由于练习本身非常简单,我很难理解有关输出的一些内容。

在第 5 章末尾,我被要求使用匿名函数重写这些行:

Enum.map [1, 2, 3, 4], fn x -> x + 2 end
Enum.each([1, 2, 3, 4], fn x -> IO.inspect x end

所以我写了这个:

Enum.map([1, 2, 3, 4], &(&1 + 2))
Enum.each([1, 2, 3, 4], &IO.inspect/1)

但运行此之后,我的输出仅来自检查:

λ elixir functions-5.exs
1
2
3
4

所以我在这里添加了一些IO.puts

IO.puts Enum.map([1, 2, 3, 4], &(&1 + 2))
IO.puts Enum.each([1, 2, 3, 4], &IO.inspect/1)

而且输出真的很奇怪,至少可以这么说:

λ elixir functions-5.exs
╚╝║═
1
2
3
4
ok

在尝试了一些替代语法并在调用之间使用变量之后,我尝试将这些行直接执行到 Interactive Elixir 中:

iex(2)> Enum.map([1, 2, 3, 4], &(&1 + 2))
[3, 4, 5, 6]

这样可以正常工作!为什么?

iex(1)> IO.puts Enum.map([1, 2, 3, 4], &(&1 + 2))
╚╝║═
:ok

IO.puts 似乎又破坏了格式,为什么又是?

我错过了什么?为什么不同的执行上下文没有相同的输出?

总结我的整体问题:威士忌探戈狐步舞???

【问题讨论】:

    标签: output elixir


    【解决方案1】:

    您传递给IO.puts 的值是一个整数列表,IO.puts 将整数列表解释为 Unicode 代码点列表(ASCII 代码是其中的一个子集):

    iex(1)> IO.puts [70,111,111]
    Foo
    :ok
    iex(2)> IO.puts [1087, 1088, 1080, 1084, 1077, 1088]
    пример
    :ok
    

    我不确定你为什么得到╚╝║═;我得到该列表的不同输出:

    iex(1)> IO.puts [3,4,5,6]
    ^C^D^E^F
    :ok
    

    另一方面,IO.inspect 会尝试打印您传递给它的任何内容的源代码表示形式。

    【讨论】:

    • 哦,谢谢,解释了很多,你能告诉我为什么 Enum.map 在 .exs 文件中没有任何输出,但在 Interactive Elixir 中有输出吗?
    • 当您使用elixir 命令运行.exs 文件时,它不会自动打印任何内容,只会打印您使用IO 函数明确告诉它打印的内容。另一方面,Interactive Elixir 总是打印您输入的每个表达式的结果
    • 感谢所有这些解释!
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多