繁体   English   中英

参数数量错误(Ruby)

[英]Wrong number of arguments (Ruby)

class Testdeck
    attr_accessor :cards

    def initialize
        @cards = []
        counter = 0
        ['H','C', 'S', 'D'].product['2','3','4','5','6','7','8','9','10','J','K','Q','A'].each do |arr|
            @cards << Card.new(arr[0], arr[1])
        end
    end
end

zen = Testdeck.new
puts zen.cards.pop

我花了最后一个小时尝试修复此错误。 我得到的错误是:

wrong number of arugments (Argument Error)

您在product方法调用中缺少括号。 尝试这个:

def initialize
    @cards = []
    counter = 0
    ['H','C', 'S', 'D'].product(['2','3','4','5','6','7','8','9','10','J','K','Q','A']).each do |arr|
        @cards << Card.new(arr[0], arr[1])
    end
end

问题在于您实际上是在访问product[]方法,这将导致在不带参数的情况下调用product并对其进行切片。

['H','C', 'S', 'D'].product # == [["H"], ["C"], ["S"], ["D"]]

由于您无法将13个参数传递给[] (这是第二个数组的大小),所以这就是为什么您输入了wrong number of arguments (13 for 1..2)

添加括号将使你的第二个阵列的论点product然后将调用each的结果,那么:

['H','C', 'S', 'D'].product[1, 2] # == [["C"], ["S"]] 

['H','C', 'S', 'D'].product [1, 2] == ['H','C', 'S', 'D'].product([1, 2]) # == [["H", 1], ["H", 2], ["C", 1], ["C", 2], ["S", 1], ["S", 2], ["D", 1], ["D", 2]]
                           ^ important separation here

正如你所看到的,你可以删除()和使用空间,但在你的情况,你不能链中的each以后,这就是为什么你必须添加它们。

您也可以这样写:

(['H','C', 'S', 'D'].product ['2','3','4','5','6','7','8','9','10','J','K','Q','A']).each do |arr|

看到@NicoSantangelo答案是正确的,这是一个使用map初始化@cards实例变量的版本

suites = ['H', 'C', 'S', 'D']
values = ('2'..'10').to_a + ['J', 'K', 'Q', 'A']

@cards = suites.product(values).map do |parts|
  Card.new(parts[0], parts[1])
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM