Ruby % 运算符

4

我有困难理解以下代码片段的作用

"foo = %{foo}" % { :foo => 'bar' }
=> "foo = bar"

所以从理解上来说,“foo = %{foo}”是格式规范,但在这种情况下,它似乎执行了变量插值与%{foo}?


1
希望示例片段能更好一些;左边的foo让我困惑了一段时间。如果可能的话,尝试将其更改为其他内容,这可能会使片段更清晰。 - Jikku Jose
3个回答

2

String#%方法使用输入的字符串作为格式规范,然后将参数(数组/哈希表)应用到规范中,返回生成的字符串。

%{...}是一种按名称引用的格式化方式。还有%<...>,它也需要格式化样式(s、d、f等)。

"foo = %{key}" % { :key => 'bar' }
# => "foo = bar"
"foo = %<key>s" % { :key => 'bar' }
# => "foo = bar"

有关格式规范的更多详细信息,请参见Kernel#sprintf


2
该内容涉及IT技术,需要翻译如下:

String#%文档提到了sprintf

sprintf的文档末尾,您会发现有两种使用名称(使用哈希参数)而不是位置(使用数组参数)的简要解释。


1
这种情况的简单解释是看待行的第一部分,它是一个字符串字面量(foo = %{foo}),因此%符号表示String的%方法(String#%),因此该字面量实际上是格式规范的第一部分,即字符串的呈现方式。%后面的部分必须是数组或哈希表,在本例中是一个哈希表,它执行命名替换,这意味着key是哈希表中必须存在的键名,返回值为bar
您可以使用普通替换来编写此代码,但需要两行代码。
hash = { :key => 'bar' }
"foo = #{hash[:key]}" 

或者只需使用变量

foo = "bar"
"foo = #{foo}"

如果没有其他内容,这样做会更易读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接