Ruby相当于Python的`s =“你好,%s。%s在哪里?” %(“ John”,“ Mary”)`


141

在Python中,这种用于字符串格式化的习惯很普遍

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

Ruby中的等效功能是什么?


3
没有字符串连接,只有字符串格式。Google会比以往任何时候都更快地回答这个问题……我花了大约20秒钟才发现您可以在Ruby中完成完全相同的工作。

您不是在要求串联,而是在要求格式/替换。你应该改变你的问题。顺便说一句,在红宝石中,使用+或<<操作符进行连接。
David

Answers:


246

最简单的方法是字符串插值。您可以将少量Ruby代码直接注入您的字符串中。

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

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

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

请记住在此处使用方括号。Ruby没有元组,只有数组,并且使用方括号。


1
我肯定会使用第一个,对我来说它更具可读性
David

1
第一个不起作用,#{}查找变量,因此在这种情况下,它将打印John变量,而不是字符串“ John”。第二个看起来正确。
杰森·诺布尔

11
您还应注意始终使用双引号,因为'#{name1}'它与相同"#{name1}"
Droogans

3
字符串插值不适用于单引号,必须使用双引号。例如:'#{"abc"}' # => "\#{\"abc\"}",但您想要的是"#{"abc"}" # => "abc"
bschlueter 2014年

2
第一种方法不是等效的-模板不能作为值传递。
OndraŽižka17年

51

在Ruby> 1.9中,您可以执行以下操作:

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

查看文件


我在那里用Idomatic Ruby进行了编辑-但现在我注意到公认的答案已经做到了-再次删除了“编辑”:-/
toong

当使用带有字符串%运算符的散列时,如果格式字符串中引用的键符号不存在,则会出现KeyError。
user1164178'2

19

几乎相同的方式:

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

在Ruby中,方括号表示元组吗?我认为方括号是列表...
TIMEX


3
Ruby没有元组(至少没有伪造成该语言)。是的,它是一个数组(Python中的“列表”应真正称为数组...)。

9

其实差不多

s = "hello, %s. Where is %s?" % ["John","Mary"]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.