【问题标题】:Elixir: Printing list along with stringElixir:打印列表和字符串
【发布时间】:2018-01-13 09:26:54
【问题描述】:

我想打印一个列表以及一个字符串标识符,例如

list = [1, 2, 3]
IO.puts "list is ", list

这不起作用。我尝试了一些变化,例如

# this prints only the list, not any strings
IO.inspect list
# using puts which also does not work
IO.puts "list is #{list}" 

在 javascript 中,我可以简单地执行 console.log("list is ", list)。我很困惑如何在 elixir 中达到同样的效果。

【问题讨论】:

  • 我最终为此创建了一个小型日志记录实用程序 - hexdocs.pm/slog/readme.html,因为我需要 JS 类型灵活的日志记录而不用担心类型。在我的开发设置中工作正常

标签: list printing elixir


【解决方案1】:

从 Elixir 1.4 开始,IO.inspect/2 接受 label 选项 among others

IO.inspect list, label: "The list is"
#⇒ The list is: [1, 2, 3]

【讨论】:

  • +1 这很好!我写了IO.inspect 包装器,它允许一个标签,但在调试时只返回多次检查的值。现在不需要这样做!只需在任何地方输入|> IO.inspect(label: "foo") 即可打印带有标签的值,而不会影响原始代码的行为。
【解决方案2】:

也许有更好的方法(我也是 Elixir 的新手)但这对我有用:

IO.puts(["list is ", Enum.join(list, " ")])                             
list is 1 2 3

插值也可以:

IO.puts("list is #{Enum.join(list, " ")}")

编辑: 对于这个用例,inspect 似乎比 Enum.join 更好:

IO.puts("list is #{inspect(list)}")
list is [1, 2, 3]

【讨论】:

  • 嗯......这似乎有很多代码只是为了在控制台上打印一些东西,我们都经常这样做:)
  • 为了在调试时快速输入,我经常使用IO.inspect 和这样的元组:IO.inspect {:list, list}。那应该打印{:list, [1, 2, 3]},这对于调试目的来说已经足够好了。
猜你喜欢
  • 2017-03-12
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多