在Ruby中是否可以有一个名为'class'的关键字参数或其他保留名称?

在Ruby中是否可以有一个名为'class'的关键字参数或其他保留名称?,ruby,Ruby,许多Rails标记帮助程序(例如,等等)使用名为class的散列选项参数来指定HTML类 content_tag(:div, content_tag(:p, "Hello world!"), class: "strong") 对于新代码,我想使用关键字参数,但当其中一个是语言关键字时,这可能吗 e、 g.对于假设的链接标签 def link_tag(url, class: nil) html = '' html << '<a href="' << url

许多Rails标记帮助程序(例如,等等)使用名为
class
的散列选项参数来指定HTML类

content_tag(:div, content_tag(:p, "Hello world!"), class: "strong")
对于新代码,我想使用关键字参数,但当其中一个是语言关键字时,这可能吗

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]
  ...
def link_标记(url,类:nil)
html=“”

html有点像。不过,您必须避免在代码中使用literal关键字,以避免混淆Ruby lexer。在Ruby 2.2+中,您可以通过
绑定绕过它。局部变量\u 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>"
def link_标记(url,类:nil)
格式(“”,url,binding.local_variable_get(:class))
结束
链接标签(“http://stackoverflow.com,班级:“幻想”)
# => ""

不过,这并不是一种非常干净的做事方式,而且可能会令人困惑。如果我要使用关键字args(即,
css\u class
或传统的
klass
等),我会尝试重命名参数,使其与语言不冲突。

不,这是不可能的。在Ruby中,使用
klass
clazz
是常规做法。Rails是否有约定,还是继续使用“opts={}”?我想到了一种方法。不过很难看。把它作为一个完整的答案。你的第二个表格很好。您是否遇到了某种错误,或者您是否想知道这是否是最佳做法?不,错误,仅适用于新函数
a:default,b:nil
,等等。看起来比
opts
要整洁得多,您必须阅读文档注释以查看它可能包含的内容。这对于其他人不关心实现的情况很好,他们对此不负责,而你只是试图创建一个干净、连贯的API。我相信,Ruby bug tracker上对此进行了讨论,可能会在局部变量中添加一些可选的符号,或者是一种转义关键字的通用方法(类似于Scala使用backticks)。@tadman,yep,与我现在使用关键词相比,保持现有惯例是一个更大的问题:)@Jörg W Mittag事实上,经过一些挖掘,我发现: