From: Anonymous Date: 2008-07-15T05:44:29+09:00 Subject: [ruby-core:17768] [Ruby 1.8.7 - Bug #276] (Open) take_while functions inconsistently Issue #276 has been reported by Anonymous. ---------------------------------------- Bug #276: take_while functions inconsistently http://redmine.ruby-lang.org/issues/show/276 Author: Anonymous Status: Open Priority: High Assigned to: Category: Target version: 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: [#, #, #, #, #, #, #] suit = 'C' cards = cards.take_while { |this_card| this_card.suit == suit }: [#, #, #] Note that # 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) ---------------------------------------- http://redmine.ruby-lang.org