Ruby tương đương với `s =, xin chào,% s của Python. % S ở đâu? % (Số John John, của Mary Mary)


141

Trong Python, thành ngữ này để định dạng chuỗi khá phổ biến

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ó định dạng chuỗi. Và google sẽ trả lời điều này nhanh hơn thậm chí SO có thể ... tôi mất khoảng 20 giây để tìm ra bạn có thể làm chính xác như vậy trong Ruby.

Bạn không yêu cầu ghép, 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 bạn. Nhân tiện, trong ruby, phép nối được thực hiện với các toán tử + hoặc <<.
David

Câu trả lời:


246

Cách dễ nhất là nội suy chuỗi . Bạn có thể tiêm trực tiếp các mẩu mã Ruby nhỏ vào chuỗi của mình.

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

Bạn cũng có thể thực hiện định dạng chuỗi trong Ruby.

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

Hãy nhớ sử dụng dấu ngoặc vuông ở đó. Ruby không có bộ dữ liệu, chỉ có mảng và những cái đó sử dụng dấu ngoặc vuông.


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

1
Cái đầu tiên sẽ không hoạt động, # {} tìm kiếm một 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ái thứ hai có vẻ đúng.
Jason Noble

11
Bạn cũng nên cẩn thận để luôn luôn sử dụng dấu ngoặc kép'#{name1}'không giống như "#{name1}".
Dropogans

3
Nội suy chuỗi không hoạt động trong dấu ngoặc đơn, bạn phải sử dụng dấu ngoặc kép. Ví dụ : '#{"abc"}' # => "\#{\"abc\"}", nhưng những gì bạn muốn là"#{"abc"}" # => "abc"
bschlueter

2
Cách đầu tiên không phải là tương đương - mẫu không thể được chuyển qua dưới dạng giá trị.
Ondra ižka

51

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

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

Xem tài liệu


Tôi đã chỉnh sửa tương đương với Idomatic Ruby ở đó - 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 đó - đã xóa 'chỉnh sửa' một lần nữa: - /
toong

Khi sử dụng hàm 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 xuất hiện, bạn sẽ nhận được KeyError.
dùng1164178

19

Gần giống như vậy:

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

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


3
Ruby không có bộ dữ liệu (ít nhất là không được rèn thành 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 ...).

9

Thực tế gần như giống nhau

s = "hello, %s. Where is %s?" % ["John","Mary"]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.