Bug #276
closedtake_while functions inconsistently
Description
=begin
take_while didn't work at all until 1.8.7 - I assume that is how it supposed to be. Perhaps that explains some of this behavior, too?
cards is an Array of Cards
pp cards:
[#<Card:0x179094 @suit="C", @value=4>,
#<Card:0x1793b4 @suit="C", @value=3>,
#<Card:0x177dd4 @suit="C", @value=10>,
#<Card:0x177500 @suit="D", @value=13>,
#<Card:0x1771e0 @suit="D", @value=14>,
#<Card:0x1770c8 @suit="S", @value=14>,
#<Card:0x177794 @suit="C", @value=12>]
suit = 'C'
cards = cards.take_while { |this_card| this_card.suit == suit }:
[#<Card:0x179094 @suit="C", @value=4>,
#<Card:0x1793b4 @suit="C", @value=3>,
#<Card:0x177dd4 @suit="C", @value=10>]
Note that #<Card:0x177794 @suit="C", @value=12> is not contained in the take_while although it is also 'C' for the suit.
For some reason, it also does not group the 4th 'C' together when sorted:
def sortBySuit( cards = nil )
if ! cards
cards = @hand_check_cards
end
cards = cards.sort_by { |card| card.suit }
end
self.sortBySuit( cards )
So we try to grab another suit:
suit = 'S'
cards = cards.take_while { |this_card| this_card.suit == suit }:
[]
We end up with nothing.
Here is the Card class.
#!/usr/bin/env ruby
class Card
attr_accessor :value, :suit
@value
@suit
def initialize( value, suit )
if value.is_a?(String)
@value = value.to_i
else
@value = value
pp value
pp 'goda'
exit
end
@suit = suit.to_s
end
def name
case @value
when 2
name = "2"
when 3
name = "3"
when 4
name = "4"
when 5
name = "5"
when 6
name = "6"
when 7
name = "7"
when 8
name = "8"
when 9
name = "9"
when 10
name = "10"
when "T"
name = "10"
when 11 # Jack
name = "J"
when 12 # Queen
name = "Q"
when 13 # King
name = "K"
when 14 # Ace
name = "A"
end
return name + @suit
end
def next
if @value == 14
return 2
else
return @value + 1
end
end
def prev
if @value == 2
return 14
else
return @value - 1
end
end
end
and here is where the Cards are initialized with their suits:
def initCards()
13.times do |this_time|
index = this_time + 2
@cards[index.to_s + 'D'] = Card.new( index.to_s, 'D' )
@cards[index.to_s + 'C'] = Card.new( index.to_s, 'C' )
@cards[index.to_s + 'S'] = Card.new( index.to_s, 'S' )
@cards[index.to_s + 'H'] = Card.new( index.to_s, 'H' )
@card_index.push( index.to_s + 'C' )
@card_index.push( index.to_s + 'H' )
@card_index.push( index.to_s + 'S' )
@card_index.push( index.to_s + 'D' )
end
end
Am I doing something wrong? This seems like a bug.
Asher (ahaig@penguinmilitia.net)
=end