Sha256: 6b6349d29b5f1c28f2c17889b78f1b5a86b907e4502914bd3b05764f11bffbc0
Contents?: true
Size: 1.3 KB
Versions: 6
Compression:
Stored size: 1.3 KB
Contents
require 'facets/core/proc/bind' module Kernel # Like instace_eval but allows parameters to be passed. unless defined?(instance_exec) # 1.9 def instance_exec(*arguments, &block) block.bind(self)[*arguments] end end end =begin test require 'test/unit' class TestInstanceEvalWithArgs < Test::Unit::TestCase class Dummy def f :dummy_value end end def test_instance_exec # Create a block that returns the value of an argument # and a value of a method call to +self+. block = lambda { |a| [a, f] } assert_equal [:arg_value, :dummy_value], Dummy.new.instance_exec(:arg_value, &block) end def test_instance_exec_with_frozen_obj block = lambda { |a| [a, f] } obj = Dummy.new obj.freeze assert_equal [:arg_value, :dummy_value], obj.instance_exec(:arg_value, &block) end def test_instance_exec_nested i = 0 obj = Dummy.new block = lambda do |arg| [arg] + instance_exec(1){|a| [f, a] } end assert_equal([:arg_value, :dummy_value, 1], obj.instance_exec(:arg_value, &block)) end def test_instance_exec_with_immediate_value obj = 1 block = lambda { |a| [a,self] } assert_equal(["A", 1], obj.instance_exec("A", &block)) end end =end
Version data entries
6 entries across 6 versions & 1 rubygems