Python'un `` = = merhaba,% s 'nin Ruby eşdeğeri nedir? % S nerede? ” % (“John”, “Mary”) `


141

Python'da, dize biçimlendirme için bu deyim oldukça yaygındır

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

Ruby'deki karşılığı nedir?


3
Dize birleştirmesi yoktur, yalnızca dize biçimlendirmesi vardır. Ve google bunu SO'ya göre daha hızlı yanıtlayacaktır ... Ruby'de tam olarak aynı şeyi yapabileceğinizi öğrenmek yaklaşık 20 saniye sürdü.

Birleştirme, biçimlendirme / değiştirme isteğinde bulunmuyorsunuz. Sorunuzu değiştirmelisiniz. Bu arada, yakutta, + veya << operatörleri ile birleştirme gerçekleştirilir.
David

Yanıtlar:


246

En kolay yol string enterpolasyonudur . Ruby kodlarının küçük parçalarını doğrudan dizelerinize enjekte edebilirsiniz.

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

Ruby'de biçimlendirme dizeleri de yapabilirsiniz.

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

Orada köşeli parantez kullanmayı unutmayın. Ruby'nin tuplleri yok, sadece diziler var ve bunlar köşeli parantez kullanıyor.


1
İlkini kesinlikle kullanırım, bana daha okunabilir görünüyor
David

1
Birincisi işe yaramaz, # {} bir değişken arar, bu durumda "John" dizesini değil, John değişkenini yazdırır. İkincisi doğru görünüyor.
Jason Noble

11
İçin de dikkatli olmalıdır daima çift tırnak kullanmak olarak '#{name1}'aynı değildir "#{name1}".
Droogans

3
Dize enterpolasyonu tek tırnak içinde çalışmaz, çift tırnak kullanmalısınız. Örneğin: '#{"abc"}' # => "\#{\"abc\"}"ama istediğiniz şey"#{"abc"}" # => "abc"
bschlueter

2
İlk yol eşdeğer değildir - şablon bir değer olarak iletilemez.
Ondra Žižka

51

Ruby> 1.9'da bunu yapabilirsiniz:

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

Dokümanlara bakın


Orada Idomatic Ruby eşdeğerini düzenledim - ama şimdi kabul edilen cevabın bunu zaten yaptığını fark ettim - tekrar 'düzenle'yi kaldırdım: - /
toong

% İşleciyle bir karma kullandığınızda, biçim dizesinde başvurulan anahtar simgesi yoksa, bir KeyError alırsınız.
user1164178

19

Neredeyse aynı şekilde:

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

Ruby'de köşeli parantezler bir demet anlamına mı geliyor? Köşeli parantezlerin liste olduğunu düşündüm ...
TIMEX

@TIMEX: Bu soru yardımcı olacaktır: stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan

3
Ruby'nin tuplleri yok (en azından dile takılmamış). Evet, bu bir dizi (Python'daki "liste" gerçekten diziler olarak adlandırılmalıdır ...).

9

Aslında neredeyse aynı

s = "hello, %s. Where is %s?" % ["John","Mary"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.