2010-08-24 49 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

相关问题