2010-08-24 42 views
118

Trong Python, thành ngữ này để định dạng chuỗi là khá phổ biếnRuby tương đương với `s =" hello,% s của Python ở đâu là% s? " % ("John", "Mary") `

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

tương đương trong Ruby là gì?

+3

Không có nối chuỗi, chỉ có chuỗi định dạng. Và google sẽ trả lời điều này nhanh hơn thậm chí SO bao giờ có thể ... nó đã cho tôi khoảng 20 giây để tìm ra bạn có thể làm chính xác như vậy trong Ruby. – delnan

+0

Bạn không yêu cầu ghép nối, yêu cầu định dạng/thay thế của bạn. Bạn nên thay đổi câu hỏi của mình. Bằng cách này, trong ruby, nối được thực hiện với + hoặc << toán tử. – David

Trả lời

202

Cách đơn giản nhất là string interpolation. Bạn có thể tiêm các đoạn mã Ruby trực tiếp vào chuỗi của bạn.

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

Bạn cũng có thể tạo chuỗi định dạng trong Ruby.

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

Hãy nhớ sử dụng dấu ngoặc vuông tại đó. Ruby không có tuple, chỉ mảng, và những người sử dụng dấu ngoặc vuông.

+1

Tôi sẽ dứt khoát sử dụng cái đầu tiên, có vẻ dễ đọc hơn với tôi – David

+1

Cái đầu tiên sẽ không hoạt động, # {} tìm biến, vì vậy trong trường hợp này nó sẽ in biến John chứ không phải chuỗi " John". Cách thứ hai có vẻ chính xác. –

+0

Điểm tốt Jason, tôi sẽ chỉnh sửa nó để làm cho nó rõ ràng hơn. – AboutRuby

16

Hầu như cùng một cách:

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

Trong Ruby, các dấu ngoặc vuông có nghĩa là một tuple không? Tôi nghĩ rằng dấu ngoặc vuông là danh sách ... – TIMEX

+0

@TIMEX: Câu hỏi này sẽ giúp: http://stackoverflow.com/questions/525957/tuples-in-ruby –

+3

Ruby không có bộ dữ liệu (ít nhất là không được giả mạo trong ngôn ngữ). Vâng, đó là một mảng ("danh sách" trong Python thực sự nên được gọi là mảng ...). – delnan

9

Trên thực tế gần như giống nhau

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

Trong Ruby 1.9 bạn có thể làm điều này:

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

Edit: thêm mất tích ':' s

tham khảo: http://ruby-doc.org/core-1.9.3/String.html

+1

: name1 : name2 Không? – masnun

+0

Tôi đã chỉnh sửa trong * Idomatic Ruby * tương đương ở đó - nhưng bây giờ tôi nhận thấy câu trả lời được chấp nhận đã làm điều đó - gỡ bỏ 'chỉnh sửa' lần nữa: -/ – toong

+0

Khi sử dụng băm với toán tử chuỗi%, nếu biểu tượng khóa được tham chiếu trong chuỗi định dạng không có, bạn sẽ nhận được một KeyError. – user1164178

Các vấn đề liên quan