2010-08-24 7 views
118

En Python, cet idiome pour le formatage de chaîne est assez fréquentQuel est l'équivalent Ruby de `s =" hello,% s de Python Où est% s? " % ("John", "Mary") `

s = "hello, %s. Where is %s?" % ("John","Mary") 

Quel est l'équivalent en Ruby?

+3

Il n'y a pas de chaîne concaténation, seule la mise en forme de chaîne. Et google y répondra plus vite que même jamais ... il m'a fallu environ 20 secondes pour découvrir que vous pouvez faire exactement la même chose avec Ruby. – delnan

+0

Vous ne demandez pas de concaténation, votre demande de formatage/substitution. Vous devriez changer votre question. Soit dit en passant, dans ruby, la concaténation est effectuée avec + ou << opérateurs. – David

Répondre

202

Le plus simple est string interpolation. Vous pouvez injecter de petits morceaux de code Ruby directement dans vos chaînes.

name1 = "John" 
name2 = "Mary" 
"hello, #{name1}. Where is #{name2}?" 

Vous pouvez également faire des chaînes de formatage dans Ruby.

"hello, %s. Where is %s?" % ["John", "Mary"] 

N'oubliez pas d'utiliser des crochets ici. Ruby n'a pas de tuples, juste des tableaux, et ceux-ci utilisent des crochets.

+1

J'utiliserais définitivement le premier, il me semble plus lisible – David

+1

Le premier ne fonctionnera pas, le # {} cherche une variable, donc dans ce cas ce serait l'impression de la variable John, pas de la chaîne " John". La seconde semble correcte. –

+0

Bon point Jason, je vais l'éditer pour le rendre plus clair. – AboutRuby

16

presque de la même façon:

irb(main):003:0> "hello, %s. Where is %s?" % ["John","Mary"] 
=> "hello, John. Where is Mary?" 
+0

Dans Ruby, les crochets signifient-ils un tuple? Je pensais que les crochets sont des listes ... – TIMEX

+0

@TIMEX: Cette question vous aidera: http://stackoverflow.com/questions/525957/tuples-in-ruby –

+3

Ruby n'a pas de tuples (du moins pas forgé dans la langue). Ouais, c'est un tableau ("list" en Python devrait vraiment s'appeler arrays ...). – delnan

9

En fait, presque le même

s = "hello, %s. Where is %s?" % ["John","Mary"] 
40

Dans Ruby 1.9, vous pouvez le faire:

s = "hello, %{name1}. Where is %{name2} ?" % { :name1 => 'John', :name2 => 'Mary' } 

Edit: ajouté manquant ':' s

Référence: http://ruby-doc.org/core-1.9.3/String.html

+1

: nom1 : nom2 Non? – masnun

+0

J'ai édité dans l'équivalent * Idomatic Ruby * là - mais maintenant je remarque que la réponse acceptée le fait déjà - supprimé le 'edit': -/ – toong

+0

Lorsque vous utilisez un hachage avec l'opérateur string%, si la clé référencée dans le La chaîne de format n'est pas présente, vous obtiendrez une KeyError. – user1164178

Questions connexes