From: Ralph Shnelvar Date: 2009-11-30T06:02:09+09:00 Subject: Re: semantics of @x v. $x SC> On Sunday 29 November 2009, Ralph Shnelvar wrote: >> |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? >> | 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?