Die Programmiersprache Ruby

Blog| Forum| Wiki  

Undokumentierte Libraries

enumerator

Die in der Ruby-Source mitgelieferte enumerator.txt enthält folgende Dokumentation:

 .\" enumerator.txt -  -*- Indented-Text -*-
 $Idaemons: /home/cvs/rb/enumerator/enumerator.txt,v 1.2 2001/07/15 10:19:24 knu Exp $
 $RoughId: enumerator.txt,v 1.5 2003/02/20 12:24:51 knu Exp $
 $Id: enumerator.txt,v 1.2 2003/10/17 14:09:43 knu Exp $
 
 ** Enumerable::Enumerator(Class)
 
 A class which provides a method `each' to be used as an Enumerable
 object.
 
 Superclass: Object
 
 Mix-ins: Enumerable
 
 require 'enumerator'
 
 Class Methods:
 
     new(obj, method = :each, *args)
 
 	Creates a new Enumerable::Enumerator object, which is to be
 	used as an Enumerable object using the given object's given
 	method with the given arguments.
 
 	e.g.:
 	    str = "xyz"
 
 	    enum = Enumerable::Enumerator.new(str, :each_byte)
 	    a = enum.map {|b| '%02x' % b } #=> ["78", "79", "7a"]
 
 Methods:
 
     each {...}
 
 	Iterates the given block using the object and the method
 	specified in the first place.
 
 
 Requiring this module also adds some methods to the Object class:
 
     to_enum(method = :each, *args)
     enum_for(method = :each, *args)
 
 	Returns Enumerable::Enumerator.new(self, method, *args).
 
 	e.g.:
 	    str = "xyz"
 
 	    enum = str.enum_for(:each_byte)
 	    a = enum.map {|b| '%02x' % b } #=> ["78", "79", "7a"]
 
 	    # protects an array from being modified
 	    a = [1, 2, 3]
 	    some_method(a.to_enum)
 
 And the Enumerable module.
 
     each_slice(n) {...}
 
 	Iterates the given block for each slice of <n> elements.
 
 	e.g.:
 	    (1..10).each_slice(3) {|a| p a}
 	    # outputs below
 	    [1, 2, 3]
 	    [4, 5, 6]
 	    [7, 8, 9]
 	    [10]
 
     enum_slice(n)
 
 	Returns Enumerable::Enumerator.new(self, :each_slice, n).
 
     each_cons(n) {...}
 
 	Iterates the given block for each array of consecutive <n>
 	elements.
 
 	e.g.:
 	    (1..10).each_cons(3) {|a| p a}
 	    # outputs below
 	    [1, 2, 3]
 	    [2, 3, 4]
 	    [3, 4, 5]
 	    [4, 5, 6]
 	    [5, 6, 7]
 	    [6, 7, 8]
 	    [7, 8, 9]
 	    [8, 9, 10]
 
     enum_cons(n)
 
 	Returns Enumerable::Enumerator.new(self, :each_cons, n).
 
     enum_with_index
 
 	Returns Enumerable::Enumerator.new(self, :each_with_index).
 
 -------------------------------------------------------
 Local variables:
 fill-column: 70
 end:

Enumerable#each_slice ist besonders nützlich, um Listen in zweidimensionale Arrays umzuwandeln.

Module#extended

Das Objekt-Level-Pendant zu Module#included.

Diese Methode wird aufgerufen, wenn ein einzelnes Objekt mittels Object#extend um das Modul erweitert wird.

Man kann sie verwenden, um spezielle Aktionen durchzuführen, wenn ein Objekt erweitert wird.

1
2
3
4
5
6
7
8
9
10
11
12
13
module Cow
  def self.extended object
    puts "#{object} extended by #{self}"
  end
   
  def nudge
    puts 'Moo!'
  end
end

cow = 'A test cow'
cow.extend Cow  #-> A test cow extended by Cow
cow.nudge  #-> Moo!


Ist offenbar seit Ruby 1.8.1 verfügbar, aber in der Pickaxe 1 nicht dokumentiert.