Forum: Ruby Field Scope

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
forest (Guest)
on 2006-01-05 14:33
(Received via mailing list)
what is the scope of @run field in the code below.  Is it module static
? If not, how module static methods can access it ?

module Test
  module Unit
    def self.run=(flag)
      @run = flag
    end

    def self.run?
      @run ||= false
    end
  end
end

at_exit do
  unless $! || Test::Unit.run?
    exit Test::Unit::AutoRunner.run($0 != "-e" && $0)
  end
end
Ross B. (Guest)
on 2006-01-05 18:44
(Received via mailing list)
On Thu, 05 Jan 2006 12:28:07 -0000, forest 
<removed_email_address@domain.invalid> wrote:

>       @run ||= false
>     end
>   end
> end

Forget about static and all that, and remember that modules are objects
too. Test::Unit is just a constant, that references the Module instance
for that module.

Does this make it any clearer?

	Test::Unit.run = 'Hmm...'
	Test::Unit.instance_eval { @run }		# => "Hmm..."

	a = Test::Unit
	a.instance_eval { @run }			# => "Hmm..."
forest (Guest)
on 2006-01-05 18:44
(Received via mailing list)
Thanks a lot, it explains everything.

Funny that somewhere i read that ruby follows Least Surprise Paradigm,
but personally me i was deeply surprised several times, while learning
it :)
Ross B. (Guest)
on 2006-01-05 18:44
(Received via mailing list)
On Thu, 05 Jan 2006 14:15:33 -0000, forest 
<removed_email_address@domain.invalid> wrote:

> Thanks a lot, it explains everything.
>
> Funny that somewhere i read that ruby follows Least Surprise Paradigm,
> but personally me i was deeply surprised several times, while learning
> it :)
>

I feel the same way, but I realise now that I feel that way because I
expect Ruby to be as convoluted and... well, surprising, as other
languages. It surprises me by how unsurprising it is (*most of the
time*)
;)
This topic is locked and can not be replied to.