需要有关Ruby案例陈述的帮助

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)

Jer*_*man 8

case陈述隐含地应用了===运算符.所以你想要更像的东西:

case j
when 2 then "Two of #{suit}"
when 3 then "Three of #{suit}"
# ...
end
Run Code Online (Sandbox Code Playgroud)


Cod*_*lan 6

你的case语句不应该包含实际的布尔比较,而应该是文字,如:

case j
when 2
 "Two of #{suit}"
when 3
 "Three of #{suit}"
end
Run Code Online (Sandbox Code Playgroud)