我有困难理解以下代码片段的作用
"foo = %{foo}" % { :foo => 'bar' }
=> "foo = bar"
所以从理解上来说,“foo = %{foo}”是格式规范,但在这种情况下,它似乎执行了变量插值与%{foo}?
String#%
方法使用输入的字符串作为格式规范,然后将参数(数组/哈希表)应用到规范中,返回生成的字符串。
%{...}
是一种按名称引用的格式化方式。还有%<...>
,它也需要格式化样式(s、d、f等)。
"foo = %{key}" % { :key => 'bar' }
# => "foo = bar"
"foo = %<key>s" % { :key => 'bar' }
# => "foo = bar"
有关格式规范的更多详细信息,请参见Kernel#sprintf
。
foo = %{foo}
),因此%符号表示String的%方法(String#%),因此该字面量实际上是格式规范的第一部分,即字符串的呈现方式。%后面的部分必须是数组或哈希表,在本例中是一个哈希表,它执行命名替换,这意味着key
是哈希表中必须存在的键名,返回值为bar
。hash = { :key => 'bar' }
"foo = #{hash[:key]}"
或者只需使用变量
foo = "bar"
"foo = #{foo}"