Quel est l'équivalent Ruby de «s =» de Python bonjour,% s. Où est% s? » % («Jean», «Marie») `

141

En Python, cet idiome pour le formatage des chaînes est assez courant

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

Quel est l'équivalent en Ruby?

TIMEX
la source
3
Il n'y a pas de concaténation de chaîne, seulement un formatage de chaîne. Et Google y répondra plus vite que jamais ... il m'a fallu environ 20 secondes pour découvrir que vous pouvez faire exactement la même chose dans Ruby.
Vous ne demandez pas de concaténation, vous demandez un formatage / substitution. Vous devriez changer votre question. D'ailleurs, dans ruby, la concaténation est effectuée avec les opérateurs + ou <<.
David

Réponses:

246

Le moyen le plus simple est l' interpolation de chaîne . 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 formater des chaînes dans Ruby.

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

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

À propos de Ruby
la source
1
J'utiliserais définitivement le premier, il me semble plus lisible
David
1
Le premier ne fonctionnera pas, le # {} recherche une variable, donc dans ce cas, il affichera la variable John, pas la chaîne "John". Le second semble correct.
Jason Noble
11
Veillez également à toujours utiliser des guillemets doubles car ce '#{name1}'n'est pas la même chose que "#{name1}".
Droogans
3
L'interpolation de chaîne ne fonctionne pas entre guillemets simples, vous devez utiliser des guillemets doubles. Par exemple '#{"abc"}' # => "\#{\"abc\"}""#{"abc"}" # => "abc"
:,
2
La première méthode n'est pas équivalente - le modèle ne peut pas être transmis en tant que valeur.
Ondra Žižka
51

Dans Ruby> 1.9, vous pouvez faire ceci:

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

Voir la documentation

trop
la source
J'ai édité dans l' équivalent Idomatic Ruby là-bas - mais maintenant je remarque que la réponse acceptée le fait déjà - a supprimé à nouveau le 'edit': - /
toong
Lorsque vous utilisez un hachage avec l'opérateur de chaîne%, si le symbole de clé référencé dans la chaîne de format n'est pas présent, vous obtiendrez une KeyError.
user1164178
19

Presque de la même manière:

irb(main):003:0> "hello, %s. Where is %s?" % ["John","Mary"]
=> "hello, John. Where is Mary?"
Manoj Govindan
la source
Dans Ruby, les crochets signifient-ils un tuple? Je pensais que les crochets sont des listes ...
TIMEX
@TIMEX: Cette question aidera: stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan
3
Ruby n'a pas de tuples (du moins pas forgés dans la langue). Ouais, c'est un tableau ("list" en Python devrait vraiment s'appeler des tableaux ...).
9

En fait presque le même

s = "hello, %s. Where is %s?" % ["John","Mary"]
phadej
la source