ruby-changes:28854
From: zzak <ko1@a...>
Date: Fri, 24 May 2013 06:46:56 +0900 (JST)
Subject: [ruby-changes:28854] zzak:r40906 (trunk): reapply r40839 [Fixes GH-316]
zzak 2013-05-24 06:46:43 +0900 (Fri, 24 May 2013) New Revision: 40906 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=40906 Log: reapply r40839 [Fixes GH-316] Modified files: trunk/lib/forwardable.rb Index: lib/forwardable.rb =================================================================== --- lib/forwardable.rb (revision 40905) +++ lib/forwardable.rb (revision 40906) @@ -19,30 +19,40 @@ https://github.com/ruby/ruby/blob/trunk/lib/forwardable.rb#L19 # #record_number(), which simply calls #[] on the <tt>@records</tt> # array, like this: # +# require 'forwardable' +# # class RecordCollection +# attr_accessor :records # extend Forwardable # def_delegator :@records, :[], :record_number # end # +# We can use the lookup method like so: +# +# r = RecordCollection.new +# r.records = [4,5,6] +# r.record_number(0) # => 4 +# # Further, if you wish to provide the methods #size, #<<, and #map, # all of which delegate to @records, this is how you can do it: # -# class RecordCollection -# # extend Forwardable, but we did that above +# class RecordCollection # re-open RecordCollection class # def_delegators :@records, :size, :<<, :map # end -# f = Foo.new -# f.printf ... -# f.gets -# f.content_at(1) -# -# If the object isn't a Module and Class, You can too extend Forwardable -# module. -# -# printer = String.new -# printer.extend Forwardable # prepare object for delegation -# printer.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts() -# printer.puts "Howdy!" +# +# r = RecordCollection.new +# r.records = [1,2,3] +# r.record_number(0) # => 1 +# r.size # => 3 +# r << 4 # => [1, 2, 3, 4] +# r.map { |x| x * 2 } # => [2, 4, 6, 8] +# +# You can even extend regular objects with Forwardable. +# +# my_hash = Hash.new +# my_hash.extend Forwardable # prepare object for delegation +# my_hash.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts() +# my_hash.puts "Howdy!" # # == Another example # -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/