这两个有不同的输出.
aArray = [[1,2],[2,3],[3,4]]
aArray.each {|subArray| puts subArray}
aArray.each {|subArray| puts "#{subArray}"}
Run Code Online (Sandbox Code Playgroud)
第一个语句分别打印数组中的所有数字,而第二个语句打印所有的subArrays.
在这种情况下,"#"做了什么魔术?
您的问题中的示例是嵌套哈希的事实并没有真正的区别,因此我将您的问题简化为:
为什么这两个例子打印出不同的输出?
puts [1,2,3]
# 1
# 2
# 3
puts "#{[1,2,3]}"
# [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
来自以下文件puts:
[...]如果使用数组参数调用,则将每个元素写入新行.每个不是字符串或数组的给定对象将通过调用其to_s方法进行转换.[...]
那说:
puts [1,2,3]
Run Code Online (Sandbox Code Playgroud)
被解释为:
[1,2,3].each do |element|
puts element
end
Run Code Online (Sandbox Code Playgroud)
基本相同的是:
puts 1
puts 2
puts 3
Run Code Online (Sandbox Code Playgroud)
并将数组中的每个元素单独打印出来.
而您的第二个示例的工作方式不同:
puts "#{[1,2,3]}"
Run Code Online (Sandbox Code Playgroud)
在第一步中,将发生字符串插值.这意味着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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |