2012-04-27 4 views
16

Je ne sais pas ce que le terme est appelé, mais en python si vous tapezsubstitution de chaîne Ruby

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

Vous obtenez "Lucky numbers: 4 2" (substitution?)

Comment dois-je faire ceci en rubis?

En essayant de faire le scénario ci-dessus, cela fonctionne si j'ai une variable, mais si j'ai besoin de sous sous plusieurs variables, les parenthèses ne sont pas une syntaxe valide.

Répondre

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

Vous pouvez utiliser quelque chose appelé String interpolation dans Ruby pour accomplir ceci.

ex:

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

Ici, chaque variable qui est à l'intérieur du # {} est interprété non comme une chaîne, mais comme un nom de variable et la valeur est remplacée.

+0

Notez que cela résout le besoin spécifique pour les entiers, et est généralement un bon langage Ruby, mais ne permet pas sprintf comme le formatage ' « % .3f »' – Phrogz

+1

@Phrogz correcte, mais la question était sur la substitution, pas de formatage. –

+1

Peut-être que ce que je cherchais est le formatage. Je voulais juste être en mesure de créer des chaînes comme ça et ensuite les passer à d'autres méthodes – MxyL

1

C'est ce qu'on appelle le formatage d'impression.

Commander plus d'exemples Ruby Formatted Printing

Avez-vous essayé quelque chose comme "%d"%10? Il évalue à "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}" 

Pour la documentation de la méthode de mise en forme a permis à String#% lire sur Kernel#sprintf.

1

Les méthodes Ruby plus étroitement imite cette syntaxe en Python sont sprintf et format, qui sont des alias pour l'autre. Vous pouvez lire à leur sujet dans le Ruby Docs.

Voici un exemple:

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

Ce serait sortie: "Lucky Numbers: 4 2"

Parenthèses sont bien sûr en option.

3

Vous pouvez également utiliser un hachage pour la substitution de chaîne. Ceci est utile si vous avez plusieurs instances qui doivent être remplacées par la même chaîne.

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