Ruby: 如何在字符串插值内的符号上使用 gsub 方法#{}
Ruby: how to use gsub method on symbol inside string interpolation #{}
我正在尝试遍历哈希,在格式化列表中打印出键和值。我的理解是字符串插值 #{} 会将符号隐式转换为字符串。但是,当我 运行 下面的代码(略有缩写)时:
holiday_hash = {
:winter => {:new_years => ["Party Hats", "Champagne"]}
}
holiday_hash.each do |key,value|
value.each do |key, value|
puts "#{key.gsub("_", " ")}: #{value.join(', ')}"
end
end
我收到此错误消息:
NoMethodError: undefined method `gsub' for :new_years:Symbol
谁能解释一下这个问题?我是否需要在 运行ning .gsub 之前将密钥显式转换为字符串? (即使用“key.to_str.gsub ...”)。
我的expected/desired输出如下:
New Years: Party Hats, Champagne
你完全有。该散列中的键是一个符号 (:new_years)。您必须首先:
puts "#{key.to_s.gsub("_", " ")}: #{value.join(', ')}"
的确,在字符串插值中,单个符号将被字符串化。
>> s = :hello
=> :hello
>> "#{s}"
=> "hello"
但是你必须记住,括号内的整个表达式在被字符串化之前被求值。这就是为什么您会看到:
>> "#{s.gsub('u','e')}"
NoMethodError: undefined method `gsub' for :hello:Symbol
from (irb):3
from /usr/local/bin/irb:11:in `<main>'
所以你必须在应用之前手动字符串化 gsub
。
我正在尝试遍历哈希,在格式化列表中打印出键和值。我的理解是字符串插值 #{} 会将符号隐式转换为字符串。但是,当我 运行 下面的代码(略有缩写)时:
holiday_hash = {
:winter => {:new_years => ["Party Hats", "Champagne"]}
}
holiday_hash.each do |key,value|
value.each do |key, value|
puts "#{key.gsub("_", " ")}: #{value.join(', ')}"
end
end
我收到此错误消息:
NoMethodError: undefined method `gsub' for :new_years:Symbol
谁能解释一下这个问题?我是否需要在 运行ning .gsub 之前将密钥显式转换为字符串? (即使用“key.to_str.gsub ...”)。
我的expected/desired输出如下:
New Years: Party Hats, Champagne
你完全有。该散列中的键是一个符号 (:new_years)。您必须首先:
puts "#{key.to_s.gsub("_", " ")}: #{value.join(', ')}"
的确,在字符串插值中,单个符号将被字符串化。
>> s = :hello
=> :hello
>> "#{s}"
=> "hello"
但是你必须记住,括号内的整个表达式在被字符串化之前被求值。这就是为什么您会看到:
>> "#{s.gsub('u','e')}"
NoMethodError: undefined method `gsub' for :hello:Symbol
from (irb):3
from /usr/local/bin/irb:11:in `<main>'
所以你必须在应用之前手动字符串化 gsub
。