我不懂红宝石语。我正在阅读一篇非常有趣的文章,其中包含以下2行红宝石代码,我需要了解它。
(0..0xFFFFFFFFFF).each do |i|
puts "#{"%010x" % i}"
end
通过谷歌搜索,我得到第一行。但我无法理解第二行。有人可以解释一下它的含义吗?
答案 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)
是字符串插值和sprintf
文件:
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#Interpolation
http://www.ruby-doc.org/core-2.1.2/Kernel.html#method-i-sprintf
"%010x" % i
与sprintf("%010x", i)
答案 3 :(得分:0)
puts "#{"%010x" % i}"
此行打印内容。如果你想插入字符串请在双引号内使用单引号。像这样"#{'%010x' %i}"
和%x表示将整数转换为十六进制,%010x表示将其设为10位值表示如果out为0,则将其设为0000000000。
答案 4 :(得分:0)
打印强>
puts
相当于C
echo
in PHP和printf
当包含在命令行应用程序中或作为更大应用程序的一部分时,它基本上允许您输出分配给方法的文本:
puts "#{"%010x" % i}"
这基本上会在屏幕上打印"#{"%010x" % i}"
的内容 - 其中的内容意味着ruby
将输出大括号内部的计算器(已在另一个答案)