Apa yang setara dengan Ruby dari Python, `s =“ halo,% s. Di mana% s? " % ("John", "Mary") `

141

Dalam Python, ungkapan ini untuk pemformatan string cukup umum

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

Apa yang setara di Ruby?

TIMEX
sumber
3
Tidak ada penggabungan string, hanya pemformatan string. Dan Google akan menjawab ini lebih cepat daripada yang SO ..., butuh sekitar 20 detik untuk mengetahui Anda dapat melakukan hal yang sama di Ruby.
Anda tidak meminta penggabungan, Anda meminta pemformatan / substitusi. Anda harus mengubah pertanyaan Anda. Omong-omong, di ruby, penggabungan dilakukan dengan + atau << operator.
David

Jawaban:

246

Cara termudah adalah interpolasi string . Anda dapat menyuntikkan potongan kecil kode Ruby langsung ke string Anda.

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

Anda juga dapat melakukan format string di Ruby.

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

Ingatlah untuk menggunakan tanda kurung siku di sana. Ruby tidak memiliki tupel, hanya array, dan yang menggunakan tanda kurung.

Tentang Ruby
sumber
1
Saya pasti akan menggunakan yang pertama, itu terlihat lebih mudah dibaca
David
1
Yang pertama tidak akan berfungsi, # {} mencari variabel, jadi dalam hal ini akan mencetak variabel John, bukan string "John". Yang kedua terlihat benar.
Jason Noble
11
Anda juga harus berhati-hati untuk selalu menggunakan tanda kutip ganda karena '#{name1}'tidak sama dengan "#{name1}".
Droogan
3
Interpolasi string tidak berfungsi dalam tanda kutip tunggal, Anda harus menggunakan tanda kutip ganda. Misalnya '#{"abc"}' # => "\#{\"abc\"}""#{"abc"}" # => "abc"
:,
2
Cara pertama bukan yang setara - templat tidak dapat diedarkan sebagai nilai.
Ondra Žižka
51

Di Ruby> 1.9 Anda dapat melakukan ini:

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

Lihat dokumen

toong
sumber
Saya mengedit dalam Ruby Idomatic yang setara di sana - tetapi sekarang saya melihat jawaban yang diterima sudah melakukan itu - menghapus 'edit' lagi: - /
toong
Saat menggunakan hash dengan operator string%, jika simbol kunci yang dirujuk dalam format string tidak ada, Anda akan mendapatkan KeyError.
user1164178
19

Cara yang hampir sama:

irb(main):003:0> "hello, %s. Where is %s?" % ["John","Mary"]
=> "hello, John. Where is Mary?"
Manoj Govindan
sumber
Di Ruby, apakah kurung siku berarti tupel? Saya pikir tanda kurung siku adalah daftar ...
TIMEX
@TIMEX: Pertanyaan ini akan membantu: stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan
3
Ruby tidak memiliki tupel (setidaknya tidak dipalsukan ke dalam bahasa). Ya, ini adalah array ("daftar" dengan Python harus benar-benar disebut array ...).
9

Sebenarnya hampir sama

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