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)
你错过了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起来,这就是您必须添加它们的原因.
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |