参数数量错误(Ruby)

Que*_*tue 0 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
Run Code Online (Sandbox Code Playgroud)

我花了最后一小时试图修复此错误.我得到的错误是:

wrong number of arugments (Argument Error)
Run Code Online (Sandbox Code Playgroud)

nic*_*elo 7

你错过了product方法调用中的parens ; 试试这个:

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
Run Code Online (Sandbox Code Playgroud)

问题是,你实际上访问[]的方法product,这将导致在调用product没有参数,然后切片的结果.

['H','C', 'S', 'D'].product # == [["H"], ["C"], ["S"], ["D"]]
Run Code Online (Sandbox Code Playgroud)

由于你不能传递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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,您可以删除()并使用空格,但在您的情况下,您无法将其链接each起来,这就是您必须添加它们的原因.