许多 Rails 标记助手(例如 content_tag 等)使用名为 class 的哈希选项参数来指定 HTML 类。

content_tag(:div, content_tag(:p, "Hello world!"), class: "strong")

对于新代码,我想使用关键字参数,但是当其中一个是语言关键字时,这可能吗?

例如对于假设的 link_tag
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]
  ...

最佳答案

有点儿。但是,您必须通过避免在代码中使用字面量关键字来避免混淆 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 等),我只会尝试重命名我的参数,以免与语言冲突。

关于ruby - 是否可以在 Ruby 中使用名为 `class` 或其他保留名称的关键字参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45653959/

10-14 17:51
查看更多