2017-06-20 34 views
0

考虑到这一点Ruby代码:为什么不带键的格式化字符串会自行返回?

format_string = "%{greeting}, %{name}" 

puts format_string %{greeting: "Hi", name: "John"} # <-- returns "Hi, John" 
puts format_string         # <-- returns "%{greeting}, %{name}" 
puts format_string %{greeting: "Hi"}  # <-- returns key{name} not found (KeyError)" 

,因为它缺少一个关键下面的代码产生错误。

puts format_string %{greeting: "Hi"} # returns "key{name} not found (KeyError)" 

虽然下面的代码返回FORMAT_STRING变量的精确值,尽管它缺少这两个键。我希望这个值等于零,或者导致像上面的代码一样的错误。

puts format_string  # returns "%{greeting: "Hi", name: "John"}" 

我在寻找如何以及为什么会返回精确值的解释,在没有密钥或变量被设置为字符串。 我已经阅读了红宝石文档和与ruby格式有关的多个网页,但我一直未能找到答案。

回答

1

您:

puts format_string 

打印format_string因为这是puts一样。通过String#%方法完成格式(并且抱怨丢失的键) puts不解释字符串中的%{...}事情,%运算符会这样做。也许把它分成两个步骤(并且是与你的空白更一致)将阐明你的东西:

formatted_string = format_string % {greeting: "Hi", name: "John"} 
# -------------------------------^ Just an operator like any other, %{ has no special meaning outside the string you use the % operator on. 
puts formatted_string 

format_string % hash%就像任何其他操作,%{有使用字符串以外没有任何特殊含义运算符%这样删除了运算符(%)和散列操作数的开放大括号({)之间的空格是有误导性的。

相关问题