私は小さなブラックジャックシミュレーターに取り組んでいます。Card.newに渡されるパラメーターに基づいて、カードクラスがカードではなくエースを自動的に作成するようにします。これが私が持っているものです:
class Card
include Comparable
attr_reader :value, :name, :suit
def self.new(*args, &block)
*args[0] == "A" ? Ace.new(*args[1]) : super(*args, &block)
end
def initialize(name, suit)
return Ace.new(suit) if name == "A"
@name, @suit = name, suit
@value = ["J", "Q", "K"].include?(name) ? 10 : name.to_i
end
def <=>(card)
@value <=> card.value
end
def hash
@value.hash
end
def to_s
return "#{@name}#{@suit}"
end
alias eql? ==
end
class Ace < Card
def initialize(suit)
@name, @suit, @value = "A", suit, 11
end
def toggle
@value = 1 if @value == 11
@value = 11 if @value == 1
end
end
これらすべてを実行すると、残念ながらエラーが返されます。
Blackjack Simulator/cards.rb:22: syntax error, unexpected tEQ, expecting '='if *args[0] == "A"
間違えなければ、通常の配列のように*argsを読み取ることができるはずです。ここでの問題は何ですか?