gpt4 book ai didi

ruby - 如何在此处文档 (heredoc) 中显示 block 的结果?

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:19 33 4
gpt4 key购买 nike

我想从此处文档 (heredoc) 中调用一个 block ,但我似乎无法让它工作。我是否误解了语法,或者这真的不可能(使用 Ruby 1.9.3)?

以下示例代码说明了我正在尝试做的事情。

colors = { "red"    => "#FF0000",
"orange" => "#FF7F00",
"yellow" => "#FFFF00",
"green" => "#00FF00",
"blue" => "#0000FF",
"indigo" => "#4B0082",
"violet" => "#8F00FF" }

puts
puts <<COLORS
--------------------------------------------------------------------------------
The colors of the rainbow:

#{ colors.each { |key, value| puts "#{key} (#{value})" } }
--------------------------------------------------------------------------------
COLORS

这会在我的系统上产生以下输出。

red (#FF0000)
orange (#FF7F00)
yellow (#FFFF00)
green (#00FF00)
blue (#0000FF)
indigo (#4B0082)
violet (#8F00FF)
--------------------------------------------------------------------------------
The colors of the rainbow:

{"red"=>"#FF0000", "orange"=>"#FF7F00", "yellow"=>"#FFFF00", "green"=>"#00FF00", "blue"=>"#0000FF", "indigo"=>"#4B0082", "violet"=>"#8F00FF"}
--------------------------------------------------------------------------------

但是,我期待以下内容。

--------------------------------------------------------------------------------
The colors of the rainbow:

red (#FF0000)
orange (#FF7F00)
yellow (#FFFF00)
green (#00FF00)
blue (#0000FF)
indigo (#4B0082)
violet (#8F00FF)
--------------------------------------------------------------------------------

最佳答案

字符串插值只是计算 #{ } 中的表达式并调用 to_s在返回值上并将前缀、返回的字符串和后缀连接在一起形成一个新字符串。

您的代码调用 each ,这将返回原始哈希值,因此您会看到 to_s哈希的返回值在输出中。并且在将 HEREDOC 参数传递给 puts <<COLORS 之前评估附加到每个的 block 。 , 所以 puts "#{...}" 的输出在 block 中出现在所需的输出之前。

您需要返回字符串的所需部分。因此,您必须对原始哈希进行一些转换,然后将这些部分与 "\n" 连接在一起。形成您需要的输出的“颜色”部分。

puts <<COLORS
--------------------------------------------------------------------------------
The colors of the rainbow:

#{ colors.map { |key, value| "#{key} (#{value})" }.join("\n") }
--------------------------------------------------------------------------------
COLORS

我会将转换和连接结果存储在 puts 之前的变量中并使用字符串插值引用该变量。我认为在 #{ } 中保持简单会更好.

关于ruby - 如何在此处文档 (heredoc) 中显示 block 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17334440/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com