【问题标题】:Pass symbol as Arguments传递符号作为参数
【发布时间】:2015-08-18 12:39:27
【问题描述】:

我有一个已经定义好的工作方法,

render_format(doc,host,table_info)

我在某个位置调用了这个方法,其中我将参数传递为,

render_format("Daily Transactions in POS", {:doc => xml,:schema_name => "#{schema_name}",:store_code => "#{store_code}"}, :sales_log => "#{sales_log}")

这工作得很好。

现在我必须将此方法称为,

render_format(:doc => xml,:host => "bhindi.rw:3000",:table_info => {'hdr' => 'pos_invoices', 'line' => 'pos_invoice_lines', 'id' => 'pos_invoice_id', 'check_image_flag' => 'Y'})

但这给出了 ArgumentError,Argument 的错误数量(1 对 3),也就是说,它将所有这些视为一个单独的参数。这是为什么?

【问题讨论】:

    标签: ruby-on-rails arguments symbols


    【解决方案1】:

    当您使用哈希作为列表中的最后一个(或唯一一个)方法参数时,Ruby 允许您省略花括号。在您的第一次调用中,参数具有不同的类型(字符串和散列),因此 Ruby 理解这些是多个参数。但是在第二次调用中,您的每个参数都是一个只有一个键值对的哈希,但是由于可选的外部花括号,Ruby 将其解释为一个哈希,从而为您提供 ArgumentError。

    您可以将每个散列包装在自己的花括号中,让 Ruby 知道它们实际上是单独的独立散列:

    render_format({ :doc => xml }, { :host => "bhindi.rw:3000" }, { :table_info => {'hdr' => 'pos_invoices', 'line' => 'pos_invoice_lines', 'id' => 'pos_invoice_id', 'check_image_flag' => 'Y'} })

    您实际上可以在第一个方法调用中看到这一点 - 第二个参数哈希包含在自己的花括号中,而最后一个不是。如果你在第二个参数上省略了外花括号,Ruby 会将第二个和第三个参数解释为一个哈希,并给你一个 ArgumentError, wrong number of Arguments(2 for 3) 错误。

    或者,如果您可以更改相关方法的实现,您可以只接受一个哈希作为参数,并在方法内通过键分隔值。

    【讨论】:

    • 感谢您的详细解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多