2012-04-27 150 views
16

不知道這個詞的叫法,但是在Python如果鍵入Ruby的字符串替換

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

你得到「幸運數字:4 2」(替換嗎?)

我該怎麼辦這在紅寶石?

試圖做到上面的場景,它有效,如果我有一個變量,但如果我需要分在多個變量括號是無效的語法。

回答

23
num1 = 4 
num2 = 2 
print "Lucky numbers: %d %d" % [num1, num2] 
26

你可以在Ruby中使用一個叫做String interpolation的東西來實現這一點。

例如:

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

在此,每個變量是#內部{}的解釋而不是作爲一個字符串,但作爲變量名和值被取代。

+0

注意,這解決了整數的具體需求,通常是一個很好的Ruby的成語,但不允許sprintf的格式,比如'「%.3f」' – Phrogz 2012-04-27 20:28:22

+1

@Phrogz正確的,但問題是關於替代,不格式化。 – 2012-04-27 20:29:44

+1

也許我正在尋找格式。我只是想能夠創建這樣的字符串,然後將它們傳遞給其他方法 – MxyL 2012-04-27 20:37:18

1

它被稱爲打印格式。

Checkout的例子Ruby Formatted Printing

你試過像"%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 > 
5
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讀了。

1

最能模仿這種語法在Python Ruby的方法是sprintfformat,這是相互的別名。您可以在Ruby Docs中深入瞭解它們。

下面是一個例子:

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

這將輸出: 「幸運數字:4 2」

括號當然可選的。

3

您還可以使用散列進行字符串替換。如果您有多個需要用相同字符串替換的實例,這非常有用。

p "%{foo} == %{foo}" % {:foo => "bar" } 
# => "bar == bar"