我必须在Ruby中编写一个tag
方法:
tag(:div, id: 'notification_panel', class: 'alert alert-danger')
应该返回跟随字符串(带有属性和值的HTML标记):
=> <div id="notification_panel" class="alert alert-danger">
这是我的标记方法:
def tag(name, *params)
result = "<#{name} "
params.each { |key, value| result << "#{key}=#\"#{value}\" " }
result << " >"
end
但shell返回跟随字符串:
=> "<div {:id=>\"notification_panel\", :class=>\"alert alert-danger\"}=#\"\" >"
我不知道为什么它会返回符号而不是符号的值(例如id
而不是:id
),它会让我\
,{{1}字符串
=>
,{
答案 0 :(得分:1)
*params
将为您提供Array
个剩余参数,其中包含一个Hash
。因此,each
只会触发一次,key
为Hash
,value
为nil
(因为Array#each
仅将一个参数传递给其yield
)。然后,#{key}
会在to_s
上致电Hash
,为您提供{:id=>"notification_panel", :class=>"alert alert-danger"}
。
**params
将为您提供Hash
剩余的关键字参数,这是您想要的(在较新的Ruby中)。
或者,在所有红宝石中,你可以这样做:
def tag(name, params)
在这种情况下应该做同样的事情,非常多。
答案 1 :(得分:0)
您可以考虑像这样写tag()
:
def tag(name, params)
"<#{name} #{params.map { |k,v| "#{k}=\"#{v}\"" }.join(' ')}>"
end
puts tag(:div, id: 'notification_panel', class: 'alert alert-danger')
#=> <div id="notification_panel" class="alert alert-danger">