## # Array # # ISO 15.2.12 class Array ## # call-seq: # array.each {|element| ... } -> self # array.each -> Enumerator # # Calls the given block for each element of `self` # and pass the respective element. # # ISO 15.2.12.5.10 def each(&block) return to_enum(:each) unless block idx = 0 while idx < length yield self[idx] idx += 1 end self end ## # call-seq: # array.each_index {|index| ... } -> self # array.each_index -> Enumerator # # Calls the given block for each element of `self` # and pass the index of the respective element. # # ISO 15.2.12.5.11 def each_index(&block) return to_enum(:each_index) unless block idx = 0 while idx < length yield idx idx += 1 end self end ## # call-seq: # array.collect! {|element| ... } -> self # array.collect! -> new_enumerator # # Calls the given block for each element of `self` # and pass the respective element. Each element will # be replaced by the resulting values. # # ISO 15.2.12.5.7 def collect!(&block) return to_enum(:collect!) unless block idx = 0 len = size while idx < len self[idx] = block.call(self[idx]) idx += 1 end self end ## # call-seq: # array.map! {|element| ... } -> self # array.map! -> new_enumerator # # Alias for collect! # # ISO 15.2.12.5.20 alias map! collect! ## # call-seq: # array.sort -> new_array # array.sort {|a, b| ... } -> new_array # # Returns a new Array whose elements are those from `self`, sorted. def sort(&block) self.dup.sort!(&block) end ## # call-seq: # array.deconstruct -> self # # Returns self. Used for array pattern matching in case/in expressions. # def deconstruct self end ## # Array is enumerable # ISO 15.2.12.3 include Enumerable end