Field Scope

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

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

···

On Thu, 05 Jan 2006 12:28:07 -0000, forest <forest.aa@gmail.com> wrote:

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

--
Ross Bamford - rosco@roscopeco.remove.co.uk

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:

···

On Thu, 05 Jan 2006 14:15:33 -0000, forest <forest.aa@gmail.com> 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:

--
Ross Bamford - rosco@roscopeco.remove.co.uk