2010-08-24 56 views
118

在Python中,這個成語的字符串格式化是相當普遍的什麼是Ruby的等效Python的`s =「hello,%s。%s是哪裏?」 %( 「約翰福音」, 「瑪麗」)`

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

什麼是Ruby中相同呢?

+3

有沒有字符串連接,只有字符串格式化。谷歌會回答這個問題,甚至比以往任何時候都更快......我花了大約20秒鐘才發現,你可以在Ruby中完全相同。 – delnan 2010-08-24 07:39:10

+0

你不是要求連接,而是要求格式化/替換。你應該改變你的問題。順便說一下,在ruby中,使用+或<<運算符來執行連接。 – David 2010-08-24 07:49:00

回答

202

最簡單的方法是string interpolation。你可以直接在你的字符串中注入一小段Ruby代碼。

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

你也可以在Ruby中做格式化字符串。

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

記得在那裏使用方括號。 Ruby沒有元組,只有數組,而那些使用方括號。

+1

我會明確地使用第一個,它看起來對我更可讀 – David 2010-08-24 07:51:00

+1

第一個不會工作,#{}查找變量,因此在這種情況下,它將打印John變量,而不是字符串「約翰」。 第二個看起來是正確的。 – 2010-08-24 14:59:16

+0

好點賈森,我會編輯它使其更加清晰。 – AboutRuby 2010-08-24 19:06:22

16

幾乎相同的方式:

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

在Ruby中,方括號是否意味着一個元組?我認爲方括號是列表... – TIMEX 2010-08-24 07:39:14

+0

@TIMEX:這個問題將有所幫助:http://stackoverflow.com/questions/525957/tuples-in-ruby – 2010-08-24 07:40:38

+3

Ruby沒有元組(至少沒有僞造成語言)。是的,它是一個數組(Python中的「list」應該被稱爲數組...)。 – delnan 2010-08-24 07:41:06

9

其實相差無幾

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

在Ruby 1.9,你可以這樣做:

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

編輯:添加缺少「:的

參考:http://ruby-doc.org/core-1.9.3/String.html

+1

:name1 :name2 不是? – masnun 2012-08-04 07:46:59

+0

我在* Idomatic Ruby *中編輯了相同的內容 - 但現在我注意到接受的答案已經做到了 - 再次刪除了'編輯': -/ – toong 2014-08-07 11:16:20

+0

當使用帶有字符串%運算符的散列時,格式字符串不存在,你會得到一個KeyError。 – user1164178 2015-02-11 00:52:44

相關問題