19

不知道这个术语叫什么(替代?),但是如果你在 python 中输入

num1 = 4  
num2 = 2  
print("Lucky numbers: %d %d" %(num1, num2))

你得到“幸运数字:4 2”

我如何在红宝石中做到这一点?

尝试执行上述方案时,如果我有一个变量,它就可以工作,但如果我需要插入多个变量,则括号不是有效的语法。

4

6 回答 6

31

您可以在 Ruby 中使用称为字符串插值的方法来完成此操作。

前任:

num1 = 4  
num2 = 2  
puts "Lucky numbers: #{num1} #{num2}";

这里 #{} 中的每个变量都被解释为不是一个字符串,而是一个变量名,并且值被替换。

于 2012-04-27T20:22:53.013 回答
25
num1 = 4  
num2 = 2  
print "Lucky numbers: %d %d" % [num1, num2]
于 2012-04-27T20:28:16.600 回答
7
n1, n2 = 17, 42
puts "Lucky single number: %d" % n1
puts "Lucky multiple numbers: %d %d" % [ n1, n2 ]
puts "Lucky inline interpolation: #{n1} #{n2}"

有关String#%方法中允许的格式的文档,请阅读Kernel#sprintf.

于 2012-04-27T20:26:40.150 回答
5

您还可以使用哈希进行字符串替换。如果您有多个需要用相同字符串替换的实例,这很有用。

p "%{foo} == %{foo}" % {:foo => "bar" }
# => "bar == bar"
于 2016-07-26T16:25:36.237 回答
3

最接近模仿 Python 中的语法的 Ruby 方法是sprintfformat,它们是彼此的别名。您可以在Ruby Docs中深入了解它们。

这是一个例子:

num1 = 4
num2 = 2
sprintf("Lucky numbers: %d %d", num1, num2)

这将输出:“幸运数字:4 2”

括号当然是可选的。

于 2012-04-27T20:29:12.057 回答
1

这称为打印格式。

查看更多示例Ruby 格式化打印

你试过类似的东西"%d"%10 吗?它评估为"10"

1.9.3-p0 :003 > "%02x"%(10)
 => "0a" 
1.9.3-p0 :004 > 

1.9.3-p0 :005 > print "Nicely formatted string with an int: %d" % 10
Nicely formatted string with an int: 10 => nil 
1.9.3-p0 :006 > 
于 2012-04-27T20:24:31.773 回答