2013-07-13 11 views
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 시간 동안이 오류를 해결하기 위해 노력했습니다. 내가 오류는 다음과 같습니다 당신은 product 메서드 호출에 괄호를 놓치고잘못된 인수 수 (Ruby)

wrong number of arugments (Argument Error) 
+4

그렇게 될 수 있을까요 친절하고 backtrace와 함께 전체 오류 메시지를 첨부? –

답변

7

; 이 시도 :

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[] 방법을 액세스하는 것입니다. 당신이 wrong number of arguments (13 for 1..2)을 가지고 왜

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

당신이 (두 번째 배열의 크기입니다) []-13 인수를 전달할 수 없기 때문에, 즉이다.

괄호를 추가하면 다음 때문에, 결과에 each를 호출합니다 두 번째 배열을 product의 인수를 만들 것입니다 : 당신이 볼 수 있듯이

['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을 연결할 수 없기 때문에 추가해야합니다.

+0

그것이 효과가 있었는데, 많이 감사했습니다 –

+1

당신은 환영합니다 :). 질문이 공개되지 않도록 하나의 답변을 수락하십시오. – NicoSantangelo

1
또한 다음과 같이 쓸 수

:

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

참조 @NicoSantangelo 여기에 변수 @cards 인스턴스를 초기화 map를 사용하여 버전, 그것은 올바른 하나입니다 답변

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 
관련 문제