Rid*_*wan 0 ruby switch-statement
似乎我的代码永远不会通过switch语句运行.每次我创建一个Deck对象时,每个Card对象的套装和名称都是nil.谁能帮我吗?
class Card
def initialize (suit, number, name)
@suit = suit
@number = number
@name = name #
end
attr_reader :suit, :number, :name
end
class Deck
def initialize
@deck = Array.new
for i in 0...4
suit = case i
when i == 0 then "Spades"
when i == 1 then "Hearts"
when i == 2 then "Diamonds"
when i == 3 then "Clubs"
end
puts i
puts suit #Debug only
for j in 2...15
name = case j
when j == 2 then "Two of #{suit}"
when j == 3 then "Three of #{suit}"
when j == 4 then "Four of #{suit}"
when j == 5 then "Five of #{suit}"
when j == 6 then "Six of #{suit}"
when j == 7 then "Seven of #{suit}"
when j == 8 then "Eight of #{suit}"
when j == 9 then "Nine of #{suit}"
when j == 10 then "Ten of #{suit}"
when j == 11 then "Jack of #{suit}"
when j == 12 then "Queen of #{suit}"
when j == 13 then "King of #{suit}"
when j == 14 then "Ace of #{suit}"
end
puts j
puts name #Debug only
@deck.push(Card.new(suit, j, name))
end
end
end
attr_reader :deck
end
Run Code Online (Sandbox Code Playgroud)
该case陈述隐含地应用了===运算符.所以你想要更像的东西:
case j
when 2 then "Two of #{suit}"
when 3 then "Three of #{suit}"
# ...
end
Run Code Online (Sandbox Code Playgroud)
你的case语句不应该包含实际的布尔比较,而应该是文字,如:
case j
when 2
"Two of #{suit}"
when 3
"Three of #{suit}"
end
Run Code Online (Sandbox Code Playgroud)