许多Rails标记帮助程序(例如content_tag等)使用名为content_tag(:div, content_tag(:p, "Hello world!"), class: "strong")
的哈希选项参数来指定HTML类。
link_tag
对于新代码,我想使用关键字参数,但是当其中一个是语言关键字时,它是否可能?
e.g。对于假设的def link_tag(url, class: nil)
html = ''
html << '<a href="' << url << '"'
html << ' class="' << class << '"' if class
...
def link_tag(url, opts={})
html = ''
html << '<a href="' << url << '"'
html << ' class="' << opts[:class] << '"' if opts[:class]
...
。
{{1}}
答案 0 :(得分:7)
有点儿。但是,必须通过避免代码中的literal关键字来避免混淆Ruby词法分析器。在Ruby 2.2+中,您可以使用binding.local_variable_get
:
def link_tag(url, class: nil)
format('<a href="%s" class="%s"></a>', url, binding.local_variable_get(:class))
end
link_tag("http://stackoverflow.com", class: "fancy")
# => "<a href=\"http://stackoverflow.com\" class=\"fancy\"></a>"
但这并不是一种非常干净的做事方式,而且很可能令人困惑。如果我要使用关键字args(即css_class
或传统的klass
等),我会尝试重新命名我的参数,使其与语言不冲突。