ruby 中带哈希的字符串插值
String interpolation with hash in ruby
我的目标是用散列值替换字符串中的键。我是这样做的:
"hello %{name}, today is %{day}" % {name: "Tim", day: "Monday"}
如果字符串中的键在哈希中丢失:
"hello %{name}, today is %{day}" % {name: "Tim", city: "Lahore"}
然后它会抛出一个错误。
KeyError: key{day} not found
预期结果应为:
"hello Tim, today is %{day}" or "hello Tim, today is "
有人可以指导我只替换匹配的键而不抛出任何错误吗?
从 Ruby 2.3 开始,%
遵循通过 default=
设置的默认值:
hash = {name: 'Tim', city: 'Lahore'}
hash.default = ''
'hello %{name}, today is %{day}' % hash
#=> "hello Tim, today is "
或通过 default_proc=
设置的动态默认值:
hash = {name: 'Tim', city: 'Lahore'}
hash.default_proc = proc { |h, k| "%{#{k}}" }
'hello %{name}, today is %{day}' % hash
#=> "hello Tim, today is %{day}"
请注意,只有缺少的密钥,即 :day
会传递给 proc。因此,它不知道您是否在格式字符串中使用 %{day}
或 %<day>s
,这可能会导致不同的输出:
'hello %{name}, today is %<day>s' % hash
#=> "hello Tim, today is %{day}"
您可以设置默认哈希值:
h = {name: "Tim", city: "Lahore"}
h.default = "No key"
p "hello %{name}, today is %{day}" % h #=>"hello Tim, today is No key"
我有带空格的哈希键,在将键转换为符号后它起作用了。
带字符串键的哈希(它在插值时返回错误):
hash = {"First Name" => "Allama", "Last Name" => "Iqbal"}
将散列键转换为符号对我有用:
hash = {:"First Name" => "Allama", :"Last Name" => "Iqbal"}
hash.default = ''
'The %{First Name} %{Last Name} was a great poet.' % hash
// The Allama Iqbal was a great poet.
我的目标是用散列值替换字符串中的键。我是这样做的:
"hello %{name}, today is %{day}" % {name: "Tim", day: "Monday"}
如果字符串中的键在哈希中丢失:
"hello %{name}, today is %{day}" % {name: "Tim", city: "Lahore"}
然后它会抛出一个错误。
KeyError: key{day} not found
预期结果应为:
"hello Tim, today is %{day}" or "hello Tim, today is "
有人可以指导我只替换匹配的键而不抛出任何错误吗?
从 Ruby 2.3 开始,%
遵循通过 default=
设置的默认值:
hash = {name: 'Tim', city: 'Lahore'}
hash.default = ''
'hello %{name}, today is %{day}' % hash
#=> "hello Tim, today is "
或通过 default_proc=
设置的动态默认值:
hash = {name: 'Tim', city: 'Lahore'}
hash.default_proc = proc { |h, k| "%{#{k}}" }
'hello %{name}, today is %{day}' % hash
#=> "hello Tim, today is %{day}"
请注意,只有缺少的密钥,即 :day
会传递给 proc。因此,它不知道您是否在格式字符串中使用 %{day}
或 %<day>s
,这可能会导致不同的输出:
'hello %{name}, today is %<day>s' % hash
#=> "hello Tim, today is %{day}"
您可以设置默认哈希值:
h = {name: "Tim", city: "Lahore"}
h.default = "No key"
p "hello %{name}, today is %{day}" % h #=>"hello Tim, today is No key"
我有带空格的哈希键,在将键转换为符号后它起作用了。
带字符串键的哈希(它在插值时返回错误):
hash = {"First Name" => "Allama", "Last Name" => "Iqbal"}
将散列键转换为符号对我有用:
hash = {:"First Name" => "Allama", :"Last Name" => "Iqbal"}
hash.default = ''
'The %{First Name} %{Last Name} was a great poet.' % hash
// The Allama Iqbal was a great poet.