O que é o Ruby equivalente ao `s =“ olá,% s do Python? Onde está% s? ” % ("João", "Maria") `


141

Em Python, esse idioma para formatação de strings é bastante comum

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

Qual é o equivalente em Ruby?


3
Não há concatenação de strings, apenas formatação de strings. E o Google responderá isso mais rápido do que o SO jamais poderia ... levei cerca de 20 segundos para descobrir que você pode fazer exatamente o mesmo em Ruby.

Você não está pedindo concatenação, está pedindo formatação / substituição. Você deve mudar sua pergunta. A propósito, em ruby, a concatenação é realizada com operadores + ou <<.
David

Respostas:


246

A maneira mais fácil é a interpolação de strings . Você pode injetar pequenos pedaços de código Ruby diretamente em suas strings.

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

Você também pode formatar seqüências de caracteres no Ruby.

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

Lembre-se de usar colchetes lá. O Ruby não possui tuplas, apenas matrizes e elas usam colchetes.


1
Eu definitivamente utilizar o primeiro, que parece mais legível para mim
David

1
O primeiro não funcionará, o # {} procurará uma variável, portanto, neste caso, ele imprimiria a variável John, não a string "John". O segundo parece correto.
Jason Noble

11
Você também deve ter cuidado para sempre usar aspas duplas, pois '#{name1}'não é o mesmo que "#{name1}".
Droogans

3
A interpolação de sequência não funciona entre aspas simples, você deve usar aspas duplas. Por exemplo '#{"abc"}' # => "\#{\"abc\"}""#{"abc"}" # => "abc"
:,

2
A primeira maneira não é equivalente - o modelo não pode ser passado como um valor.
Ondra Žižka

51

Em Ruby> 1.9, você pode fazer isso:

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

Veja os documentos


Eu editei no equivalente Idomatic Ruby lá - mas agora percebo que a resposta aceita já faz isso - removi a 'edição' novamente: - /
toong

Ao usar um hash com o operador string%, se o símbolo da chave mencionado na string format não estiver presente, você obterá um KeyError.
user1164178

19

Quase da mesma maneira:

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

No Ruby, os colchetes significam uma tupla? Eu pensei que colchetes são listas ...
TIMEX


3
Ruby não possui tuplas (pelo menos não forjadas no idioma). Sim, é uma matriz ("lista" em Python deve realmente ser chamada de matriz ...).

9

Na verdade quase o mesmo

s = "hello, %s. Where is %s?" % ["John","Mary"]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.