是否可以在Ruby中使用名为`class`或其他保留名称的关键字参数?

时间:2017-08-12 19:08:55

标签: ruby

许多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}}

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等),我会尝试重新命名我的参数,使其与语言不冲突。