【问题标题】:What is Ruby equivalent of Python's `s= "hello, %s. Where is %s?" % ("John","Mary")`什么是 Ruby 等价于 Python 的 `s= "hello, %s. Where is %s?" %(“约翰”,“玛丽”)`
【发布时间】:2011-04-03 00:46:02
【问题描述】:

在 Python 中,这种字符串格式化的习语很常见

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

Ruby 中的等价物是什么?

【问题讨论】:

  • 没有字符串连接,只有字符串格式。谷歌会比以往任何时候都更快地回答这个问题……我花了大约 20 秒才发现你可以在 Ruby 中做同样的事情。
  • 您不是要求连接,而是要求格式化/替换。你应该改变你的问题。顺便说一句,在 ruby​​ 中,使用 + 或

标签: python ruby string-formatting


【解决方案1】:

几乎一样:

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

【讨论】:

  • 在 Ruby 中,方括号是否表示元组?我认为方括号是列表...
  • @TIMEX:这个问题会有所帮助:stackoverflow.com/questions/525957/tuples-in-ruby
  • Ruby 没有元组(至少没有伪造成语言)。是的,它是一个数组(Python 中的“列表”实际上应该称为数组......)。
【解决方案2】:

其实差不多

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

【讨论】:

    【解决方案3】:

    最简单的方法是string interpolation。您可以将一小段 Ruby 代码直接注入到您的字符串中。

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

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

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

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

    【讨论】:

    • 我肯定会使用第一个,它看起来对我来说更具可读性
    • 第一个不起作用,#{} 寻找一个变量,所以在这种情况下它会打印 John 变量,而不是字符串“John”。第二个看起来是正确的。
    • 您还应该注意始终使用双引号,因为'#{name1}'"#{name1}" 不同。
    • 字符串插值在单引号中不起作用,必须使用双引号。例如:'#{"abc"}' # => "\#{\"abc\"}",但你要的是"#{"abc"}" # => "abc"
    • 第一种方式不是等价的——模板不能作为值传递。
    【解决方案4】:

    在 Ruby > 1.9 中,您可以这样做:

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

    See the docs

    【讨论】:

    • 我在那里编辑了 Idomatic Ruby 等效项 - 但现在我注意到接受的答案已经这样做了 - 再次删除了“编辑”:-/
    • 当使用带有字符串 % 操作符的散列时,如果格式字符串中引用的键符号不存在,你会得到一个 KeyError。
    猜你喜欢
    • 2016-06-12
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2015-08-30
    相关资源
    最近更新 更多