无法理解Ruby代码中的“puts”关键字

时间:2014-06-16 06:25:46

标签: ruby-on-rails ruby

我不懂红宝石语。我正在阅读一篇非常有趣的文章,其中包含以下2行红宝石代码,我需要了解它。

(0..0xFFFFFFFFFF).each do |i|
     puts "#{"%010x" % i}"
end

通过谷歌搜索,我得到第一行。但我无法理解第二行。有人可以解释一下它的含义吗?

5 个答案:

答案 0 :(得分:7)

puts "#{"%010x" % i}"实际上有两个部分 - 字符串插值(G.B告诉你)和使用%的字符串格式:

  

格式 - 使用str作为格式规范,并返回结果   将它应用于arg。如果格式规范包含多个   替换,然后arg必须是包含值的Array或Hash   被替代。有关格式的详细信息,请参阅Kernel::sprintf   字符串。

"%05d" % 123                              #=> "00123"
"%-5s: %08x" % [ "ID", self.object_id ]   #=> "ID   : 200e14d6"
"foo = %{foo}" % { :foo => 'bar' }        #=> "foo = bar"

所以"%010x" % i将十六进制格式的整数(x)格式化为至少10位数(10),用零填充(前导0):

"%010x" % 150000
# => "00000249f0" 

实际上

puts "#{"%010x" % i}"

完全相同
puts "%010x" % i

因为插值只是将结果值(字符串)放在字符串....

答案 1 :(得分:3)

Puts关键字用于在控制台上打印数据。 例如

puts "writing data to console"

上面的行会将完整的行打印到控制台"writing data to console"

@a = "this is a string"

puts @a

这将打印"this is a test string"

puts "My variable a contains #{@a}"

这将打印"My variable a contains this is a string",这种合并技术称为字符串插值。

puts "#{"%010x" % i}"中的第一个参数指定格式,第二个参数表示值。

有关您的确切问题和详细信息,请参阅this link

答案 2 :(得分:0)

答案 3 :(得分:0)

puts "#{"%010x" % i}"

此行打印内容。如果你想插入字符串请在双引号内使用单引号。像这样"#{'%010x' %i}"

和%x表示将整数转换为十六进制,%010x表示将其设为10位值表示如果out为0,则将其设为0000000000。

答案 4 :(得分:0)

打印

puts相当于C

中的echo in PHPprintf

当包含在命令行应用程序中或作为更大应用程序的一部分时,它基本上允许您输出分配给方法的文本:

puts "#{"%010x" % i}"

这基本上会在屏幕上打印"#{"%010x" % i}"的内容 - 其中的内容意味着ruby将输出大括号内部的计算器(已在另一个答案)