Ruby เทียบเท่าอะไรกับ Python `s =“ hello,% s % s อยู่ที่ไหน (“ จอห์น”,“ แมรี่”) `


141

ใน Python สำนวนนี้สำหรับการจัดรูปแบบสตริงค่อนข้างบ่อย

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

อะไรที่เทียบเท่าใน Ruby?


3
ไม่มีการต่อสตริงให้จัดรูปแบบสตริงเท่านั้น และ google จะตอบคำถามนี้เร็วกว่าที่เคยทำได้ ... ใช้เวลาประมาณ 20 วินาทีในการหาว่าคุณสามารถทำสิ่งเดียวกันในรูบีได้

คุณไม่ได้ขอให้ทำการเรียงต่อกันการขอฟอร์แมต / การทดแทน คุณควรเปลี่ยนคำถามของคุณ โดยวิธีการใน ruby, concatenation จะดำเนินการกับ + หรือ << ผู้ประกอบการ
เดวิด

คำตอบ:


246

วิธีที่ง่ายที่สุดคือสตริงแก้ไข คุณสามารถใส่รหัส Ruby ลงในสตริงของคุณได้โดยตรง

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

คุณยังสามารถทำสตริงการจัดรูปแบบใน Ruby

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

อย่าลืมใช้วงเล็บเหลี่ยมที่นั่น Ruby ไม่มี tuples เพียงแค่อาร์เรย์และพวกนั้นใช้วงเล็บเหลี่ยม


1
ฉันจะใช้อันแรกอย่างแน่นอนมันดูเหมือนฉันจะอ่านได้มากกว่า
เดวิด

1
คนแรกไม่ทำงาน # {} ค้นหาตัวแปรดังนั้นในกรณีนี้มันจะพิมพ์ตัวแปร John ไม่ใช่สตริง "John" อันที่สองดูถูกต้อง
Jason Noble

11
นอกจากนี้คุณควรจะระมัดระวังในการมักจะใช้คำพูดสองเป็นไม่ได้เช่นเดียวกับ'#{name1}' "#{name1}"
Droogans

3
การแก้ไขสตริงไม่ทำงานในเครื่องหมายคำพูดเดี่ยวคุณต้องใช้เครื่องหมายคำพูดคู่ ตัวอย่างเช่น: '#{"abc"}' # => "\#{\"abc\"}"แต่สิ่งที่คุณต้องการคือ"#{"abc"}" # => "abc"
bschlueter

2
วิธีแรกไม่เทียบเท่า - ไม่สามารถส่งค่าเทมเพลตเป็นค่าได้
Ondra Žižka

51

ใน Ruby> 1.9 คุณสามารถทำได้:

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

ดูเอกสาร


ฉันแก้ไขในIdomatic Ruby ที่นั่น - แต่ตอนนี้ฉันสังเกตเห็นคำตอบที่ยอมรับแล้วว่า - ลบ 'แก้ไข' อีกครั้ง: - /
toong

เมื่อใช้แฮชกับตัวดำเนินการสตริง% หากไม่มีสัญลักษณ์สัญลักษณ์ที่อ้างอิงในสตริงรูปแบบคุณจะได้รับ KeyError
user1164178

19

เกือบจะเหมือนกัน:

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

ใน Ruby วงเล็บเหลี่ยมมีความหมายว่า tuple หรือไม่? ฉันคิดว่าวงเล็บเหลี่ยมเป็นลิสต์ ...
TIMEX

@TIMEX: คำถามนี้จะช่วย: stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan

3
Ruby ไม่มี tuples (อย่างน้อยก็ไม่ได้ปลอมแปลงเป็นภาษา) ใช่มันเป็นอาร์เรย์ ("รายการ" ใน Python ควรเรียกว่าอาร์เรย์ ... )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.