0
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

このエラーを修正するために、過去 1 時間費やしました。私が得るエラーは次のとおりです。

wrong number of arugments (Argument Error)
4

3 に答える 3

7

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

問題は、引数なしで呼び出すと結果が得[]られるメソッドに実際にアクセスし、結果をスライスすることです。productproduct

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

[]13 個の引数(2 番目の配列のサイズ) を渡すことができないため、 wrong number of arguments (13 for 1..2).

括弧を追加すると、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

于 2013-07-13T14:35:15.947 に答える
1

以下のように書くこともできます:

(['H','C', 'S', 'D'].product ['2','3','4','5','6','7','8','9','10','J','K','Q','A']).each do |arr|
于 2013-07-13T14:39:37.163 に答える