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?


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.


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


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

Di Ruby, apakah kurung siku berarti tupel? Saya pikir tanda kurung siku adalah daftar ...
TIMEX


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"]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.