Newbie here:
Consider
irb(main):001:0> @xyzzy = 5
=> 5
irb(main):002:0> defined? @xyzzy
=> “instance-variable”
irb(main):003:0> $xyzzy = 5
=> 5
irb(main):004:0> defined? $xyzzy
What, semantically, is the difference between $x and @x when at top
level? (Am I at top level?)
Do $xyzzy and @xyzzy have global scope at statement 5 and beyond?
On Sunday 29 November 2009, Ralph S. wrote:
|
|
|What, semantically, is the difference between $x and @x when at top
|level? (Am I at top level?)
|
|Do $xyzzy and @xyzzy have global scope at statement 5 and beyond?
|
@xyzzy = 5 defines an instance variable for the global object. That
instance
variable is accessible only from the top level. $xyzzy = 5, instead,
defines a
global variable, which can be accessed from everywhere.
Here’s an example:
@x = 1
$y = 2
class C
def test
p defined?(@x)
p defined?($y)
p @x
p $y
end
end
C.new.test
The output is:
nil
“global-variable”
nil
2
This shows that, while $y can be accessed even from instances of the C
class,
@x is accessible only from top level, that is only from the main object.
By the way, I suspect you forgot to paste a last line of output in your
example. defined?($xyzzy) should have given you “global-variable”.
I hope this helps
Stefano
SC> On Sunday 29 November 2009, Ralph S. wrote:
|
|
|What, semantically, is the difference between $x and @x when at top
|level? (Am I at top level?)
|
|Do $xyzzy and @xyzzy have global scope at statement 5 and beyond?
|
SC> @xyzzy = 5 defines an instance variable for the global object. That
instance
SC> variable is accessible only from the top level. $xyzzy = 5, instead,
defines a
SC> global variable, which can be accessed from everywhere.
SC> Here’s an example:
SC> @x = 1
SC> $y = 2
SC> class C
SC>
SC> def test
SC> p defined?(@x)
SC> p defined?($y)
SC> p @x
SC> p $y
SC> end
SC>
SC> end
SC> C.new.test
SC> The output is:
SC> nil
SC> “global-variable”
SC> nil
SC> 2
SC> This shows that, while $y can be accessed even from instances of the
C class,
SC> @x is accessible only from top level, that is only from the main
object.
SC> By the way, I suspect you forgot to paste a last line of output in
your
SC> example. defined?($xyzzy) should have given you “global-variable”.
SC> I hope this helps
SC> Stefano
I thank you greatly for you explanation and your time.
Is there a document that you know of that describes these scoping
rules for beginners?
On Sunday 29 November 2009, Ralph S. wrote:
|>> |irb(main):004:0> defined? $xyzzy
| everywhere.
|SC> p defined?($y)
|SC> nil
| “global-variable”.
|
|SC> I hope this helps
|
|SC> Stefano
|
|I thank you greatly for you explanation and your time.
|
|Is there a document that you know of that describes these scoping
|rules for beginners?
|
Well, these are among the basics of ruby, so any introduction to ruby
should
explain them. You can find the free version of Programming Ruby at
Programming Ruby: The Pragmatic Programmer's Guide (it’s a bit old, but is
mostly
still valid). Then, there are a number of other documentation for
beginners
mentioned here Ruby-Doc.org: Documenting the Ruby Language. I can’t say which ones can
be
more useful, though.
Stefano