+ if val.nil?
+ index = rand(self.length)
+ else
+ index = self.index(val)
+ return nil unless index
+ end
+ self.delete_at(index)
+ end
+
+ # shuffle and shuffle! are defined in Ruby >= 1.8.7
+
+ # This method returns a new array with the same items as
+ # the receiver, but shuffled
+ unless method_defined? :shuffle
+ def shuffle
+ sort_by { rand }
+ end