gpt4 book ai didi

ruby-on-rails - Ruby:从数组动态创建函数调用参数列表

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:06 27 4
gpt4 key购买 nike

我正在使用 axlsx gem 创建电子表格。我想在所有电子表格列上设置固定宽度,我需要调用该函数

def column_widths(*widths)
widths.each_with_index do |value, index|
next if value == nil
Axlsx::validate_unsigned_numeric(value) unless value == nil
find_or_create_column_info(index).width = value
end
end

Axlsx::Worksheet 中定义,具有任意数量的列宽。例如。 `sheet.column_width(20, 20, ..., 20)。我的方法调用看起来像

sheet.column_widths [20]*headers.length

它会导致错误

ActionView::Template::Error (Invalid Data [20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20] for Invalid column width. must be [Fixnum, Integer, Float].

如何为未知数量的列动态创建适当的方法调用?

最佳答案

您的问题是方法 column_widths 定义如下:

def column_widths(*widths)
# some stuff

出现在参数 *widths 中的飞溅运算符 * 意味着您可以有 1 到 N(其中 N > 1)个参数。您正在尝试将此方法与 Integer 数组一起使用,而应该将每个 Integer 作为单个参数传递,例如:

sheet.column_widths(20, 20, 20, 20, #etc...

但这不是最好的方法。使用这些参数的一种更好的方法是同时使用 splatter 运算符:

sheet.column_widths(*[20]*headers.length)
#^ This is the splatter operator

splatter 运算符实用程序的一个非常明确的示例(在我的 IRB 控制台中,Ruby 1.9.3p489):

ann, marc, john = *['Ann', 'Marc', 'John']
# => ["Ann", "Marc", "John"]
ann
# => "Ann"

关于飞溅运算符的一些东西:http://4loc.wordpress.com/2009/01/16/the-splat-operator-in-ruby/

关于ruby-on-rails - Ruby:从数组动态创建函数调用参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26366225/

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