【问题标题】:Ruby string interpolation equivalent to python's .format()Ruby 字符串插值等效于 python 的 .format()
【发布时间】:2015-05-24 04:48:08
【问题描述】:

在python中我可以做到

_str = "My name is {}"
...
_str = _str.format("Name")

当我尝试使用红宝石时

_str = "My name is #{name}"

解释器抱怨变量 name 未定义,所以它是期待的

_str = "My name is #{name}" => {name =: "Name"}

如何在 ruby​​ 中使用字符串占位符以供以后使用?

【问题讨论】:

    标签: ruby string string-interpolation language-comparisons


    【解决方案1】:

    您可以使用延迟插值。

    str = "My name is %{name}"
    # => "My name is %{name}"
    
    puts str % {name: "Sam"}
    # => "My name is Sam"
    

    Ruby 中的 %{} 和 % 运算符允许将字符串插值延迟到以后。 %{} 在字符串中定义命名的占位符,并且 % 将给定的输入绑定到占位符中。

    【讨论】:

      【解决方案2】:

      解释器不需要哈希,它需要一个名为 name 的变量。

      name = "Sam"
      p str = "My name is #{name}" # => "My name is Sam"
      

      % 方法可以像@rastasheep 演示的那样使用。它可以以更简单的方式使用:

      str = "My name is %s"
      p str % "Name" # => "My name is Name"
      

      【讨论】:

        【解决方案3】:

        根据之前的答案,您可以使用 %s 代替 {} 以实现简单性和灵活性。如果您有多个未命名的占位符,请使用数组而不是字符串。

        _str = "%s is a %s %s"
        ...
        _str % %w(That nice movie)  # => "That is a nice movie"
        

        【讨论】:

          猜你喜欢
          • 2011-05-25
          • 2011-06-25
          • 1970-01-01
          • 2018-03-29
          • 1970-01-01
          • 2013-06-16
          • 1970-01-01
          • 2013-09-13
          • 2013-05-16
          相关资源
          最近更新 更多