我想循环使用Hashie :: Mash的键和值。
我试图这样做:
html = "Just look at these subscriptions!"
client.subscriptions.each do |sub|
html << sub.each do |key, value|
html << key.to_s
html << " = "
html << value.to_s
end
end
它返回以下错误:
“无法将Hashie :: Mash转换为字符串(Hashie :: Mash#to_str给出NilClass)”
我已尝试生成sub.keys.to_s
,sub.values.to_s
的{{1}}和["key1", "key2", "key3"]
,但我正在寻找显示匹配对的内容,因为它们位于hash,或者像[“key1:value1”,“key2:value2”,“key3:value3”]。有没有办法在不将单独的数组压缩在一起的情况下执行此操作?
谢谢!
答案 0 :(得分:3)
sub.to_hash
显示完全的内容,就像哈希一样。 :)那么你可以做任何你可以用哈希做的事情;像
html << sub.to_hash.to_s
或者你可以用更多的Rubyish方式做你正在做的事情:
html << sub.map { |key, value| "#{key} = #{value}" }.join(", ")
但是,您的真正问题在于html << sub.each ...
:each
会返回正在迭代的集合,因此您正在执行html << sub
;这失败了。如果您刚从该行中删除了html <<
,那么您的代码就可以正常工作,因为each
循环内部会处理连接。