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?


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.


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


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?"

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


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"]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.