这两个有不同的输出。
aArray = [[1,2],[2,3],[3,4]]
aArray.each {|subArray| puts subArray}
aArray.each {|subArray| puts "#{subArray}"}
第一个 each 语句单独打印数组中的所有数字,而第二个语句打印所有子数组。
“#”在这种情况下有什么神奇的作用?
最佳答案
您问题中的示例是嵌套哈希这一事实并没有什么区别,因此我会将您的问题简化为:
为什么这两个示例打印出不同的输出?
puts [1,2,3]
# 1
# 2
# 3
puts "#{[1,2,3]}"
# [1, 2, 3]
来自 puts
的文档:
[...] If called with an array argument, writes each element on a new line. Each given object that isn’t a string or array will be converted by calling its to_s method. [...]
也就是说:
puts [1,2,3]
被解释为:
[1,2,3].each do |element|
puts element
end
基本相同的是:
puts 1
puts 2
puts 3
并单独在一行中打印数组的每个元素。
而您的第二个示例的工作方式不同:
puts "#{[1,2,3]}"
第一步将进行字符串插值。这意味着 Ruby 将评估 "#{[1,2,3]}"
部分。字符串插值是通过对 #{}
中的表达式调用 to_s
来完成的。调用 [1,2,3].to_s
将返回字符串(不是数组)'[1,2,3]'
。该字符串被插入到插值位置的外部字符串中。结果是 Ruby 在第二步中打印成一行的一个字符串。为了说明每个步骤:
puts "#{[1,2,3]}"
puts "#{[1,2,3].to_s}"
puts "#{'[1,2,3]'}"
puts "[1,2,3]"
# [1,2,3]
关于ruby - 为什么这些输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46492790/