%在以下代码中做了什么?

时间:2013-11-26 21:22:53

标签: ruby-on-rails ruby ruby-on-rails-3

我正在阅读“Rails 3 Way”和第39页,它显示了匹配:to =>重定向方法的代码示例。在该方法中,存在以下代码。虽然我知道模数对数字有什么作用,但我不确定%在下面做了什么,因为路径和参数都显然不是数字。如果有人能帮我理解在这种情况下使用%,我会很感激。

proc { |params| path % params }

2 个答案:

答案 0 :(得分:10)

这可能是String#%方法,与其他语言中的sprintf非常相似:

'%05d' % 10
# => "00010"

它可以采用单个参数或数组:

'%.3f %s' % [ 10.341412, 'samples' ]
# => "10.341 samples"

更新:正如Philip指出的那样,这种方法也需要哈希:

'%{count} %{label}' % { count: 20, label: 'samples' }
# => "20 samples"

当然,这是假设path是一个字符串。在Ruby中,除非您仔细阅读代码,否则您永远不会确定。这不太可能,但可能%意味着模数。

你可以肯定的是它在%上调用方法path

答案 1 :(得分:2)

它进行字符串插值。在最简单的情况下,它相当于:

"foo %s baz" % 'bar'
#=> "foo bar baz"

但是,您也可以使用更复杂的格式说明符来从Array或Hash对象进行插值,例如Rails params 哈希。有关如何构建有效格式规范的详细信息,请参阅String#%Kernel#sprintf方法。