gpt4 book ai didi

ruby-on-rails - 将符号作为参数传递

转载 作者:行者123 更新时间:2023-12-02 03:25:23 25 4
gpt4 key购买 nike

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

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,Arguments 的错误数量(1 为 3),也就是说它将整个参数视为一个参数。这是为什么?

最佳答案

当您使用散列作为列表中的最后一个(或唯一的)方法参数时,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) 错误。

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

关于ruby-on-rails - 将符号作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com