gpt4 book ai didi

ruby - 为什么这些输出不同?

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

这两个有不同的输出。

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/

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