From: tfdj Date: 2006-04-02T00:11:02+09:00 Subject: Eval needs explicit self for accessor methods? hi all! i encountered a strange problem with eval. please see the following test case: require 'test/unit' class TestContext def eval_in_context( ruby_code ) instance_eval ruby_code end def toast @toast end def toast=( val ) @toast = val end end class TestMetaEval < Test::Unit::TestCase def test_toast tc = TestContext.new tc.toast = 'yes' assert_equal 'yes', tc.toast assert_equal 'yes', tc.eval_in_context( "toast" ) # These two lines - using explicit self - work as expected: assert_equal 'maybe', tc.eval_in_context( "self.toast = 'maybe'" ) assert_equal 'maybe', tc.toast # What is happening here: assert_equal 'no', tc.eval_in_context( "toast = 'no'" ) # Why does the next test fail? # What did the previous line set? A local variable? # tc.toast returns 'maybe' here instead of the expected 'no': assert_equal 'no', tc.toast end end why is the 'toast=(val)' method not visible in eval unless i explicitly use "self.toast = ..."? what is it i don't understand about ruby scoping? :/ any help really appreciated! cheers, daniel -- Posted via http://www.ruby-forum.com/.