ruby 为什么2个关键字参数被解释为1?

bvn4nwqk  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(153)

为什么下面的工作来纠正禁用表单中的单选按钮:

<%= radio_button_tag 'set_creation_radio', 'set_editor', false, disabled: true %>

字符串
但这并不(注意添加了关键字参数checked):

<%= radio_button_tag 'set_creation_radio', 'set_editor', checked: false, disabled: true %>


在此位置使用断点时,checked在第一个(即工作)示例:

0> checked
=> true


而第二个似乎将两个关键字解释为一个参数:

0> checked
=> {:checked=>true, :disabled=>true}


这是radio_button_tag的源代码,我不明白为什么checked在我的例子中被解释为哈希:

def radio_button_tag(name, value, checked = false, options = {})
        html_options = { "type" => "radio", "name" => name, "id" => "#{sanitize_to_id(name)}_#{sanitize_to_id(value)}", "value" => value }.update(options.stringify_keys)
        html_options["checked"] = "checked" if checked
        tag :input, html_options
      end

ztmd8pv5

ztmd8pv51#

在Ruby中调用一个方法说“哦,这是一个散列,所以我将把它移到第四个参数”并没有什么魔力。在第二个例子中,你有三个参数:

  • 第一个月
  • 'set_editor'
  • { checked: false, disabled: true }

因此,它们被分配给radio_button_tag方法调用中的前三个参数,即。

  • name = 'set_creation_radio'
  • value = 'set_editor'
  • checked = { checked: false, disabled: true }
esbemjvw

esbemjvw2#

在第一个范例中,false值会明确传递为checked参数,而disabled变数则会解译为options参数。这意味着disabled将被视为一个单独的参数,并与默认选项散列(在本例中为空)合并。
但在第二个示例中,选中了:false和已禁用:true作为单个散列参数传递给options参数。在这种情况下,选项包括选中的键和禁用的键。
在第一个范例中,已核取的值会明确设定为false,因此它会维持false,而不会被覆写。但在第二个示例中,checked作为选项散列的一部分包含在内,因此它从那里取false值。要修复第二个示例,请执行以下操作:

<%= radio_button_tag 'set_creation_radio', 'set_editor', false, disabled: true %>

字符串

相关问题