Sha256: 1b5c43dc6a99898aad3d8d9748a2fcd401b9ada4adc888193826a28e9e406c1f
Contents?: true
Size: 1.27 KB
Versions: 6
Compression:
Stored size: 1.27 KB
Contents
# = reference.rb # # == Copyright (c) 2005 Thomas Sawyer # # Ruby License # # This module is free software. You may use, modify, and/or redistribute this # software under the same terms as Ruby. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # # == Author(s) # # * Thomas Sawyer require 'facets/more/basicobject' # = Reference # # Reference provides a way to access object indirectly. # This allows for the object itself to be changed on the fly. # # == Synopsis # # a = "HELLO" # b = ref(a) # puts b #=> "HELLO" # c = 10 # b.become(c) # puts b #=> "10" # class Reference < BasicObject def self.new(obj) ref = allocate ref.become obj ref end def method_missing(*args, &block) @ref.__send__(*args, &block) end def become(obj) old = @ref @ref = obj old end def __value__ @ref end alias_method :self, __value__ end module Kernel # Shortcut reference constructor. def ref(x) Reference.new(x) end end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # =begin #test require 'test/unit' # TODO =end
Version data entries
6 entries across 6 versions & 1 rubygems