4

我见过很多输出变量的方法。这些方法中哪个“更好”?

my_name = 'Jeff Hall'
my_height = 74 
puts "Let's talk about %s." % my_name
puts "He's %d inches tall." % my_height

对比

puts "Let's talk about #{my_name}."
puts "He's #{my_height} inches tall." 

另外,sd之后代表%什么?

4

3 回答 3

5

除非我需要格式化字符串,否则我更喜欢第二种方式。有关样式的更多问题,请查看GitHub Styleguide for Ruby

关于%s%d。它们是格式化程序,它们的列表在Ruby Kernel::sprintf doc page 上

于 2012-04-09T17:22:30.253 回答
4

请参阅该String#%方法的文档,其中引用Kernel#sprintf了描述内容%s%d含义的参考资料。

字符串插值适用于简单的自记录字符串。但是,使用占位符可以使您的代码更短,并且还可以为您提供格式化功能,而不仅仅是字符串插值:

values = { average:12.3, max:15.34734112, min:9.2314311 }
values.each do |name,value|
  puts "%7s: %5.2f" % [ name, value ]
end

#=> average: 12.30
#=>     max: 15.35
#=>     min:  9.23

这些printf代码非常令人讨厌,并且它们与其他语言有着悠久的历史(这就是它们看起来不像 Ruby 的原因),但它们功能强大且简洁。

于 2012-04-09T17:21:42.097 回答
0

我最近才偶然发现 % 称为嵌入。似乎它替代了您在 % 之后放置的内容。

例如

name = "harry"
puts "My name is %s" %name

%s 和 %d 的简单答案是 %s 用于字符串,而 %d 用于小数。继续前面的例子。

age = 35
puts "My name is %s and I am %d years old" %[name, age]
于 2013-10-16T19:02:15.857 回答