在Ruby中是否可以有一个名为'class'的关键字参数或其他保留名称?
许多Rails标记帮助程序(例如,等等)使用名为在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
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事实上,经过一些挖掘,我发现: