Field Scope


#1

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


#2

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..."

#3

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 :slight_smile:


#4

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 :slight_smile:

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
)
:wink: