On Sat, Mar 29, 2008 at 4:40 PM, Ruby Freak <twscannell / gmail.com> wrote:
>
>  I am reading Hal Fulton's "The Ruby Way" On page 57 he makes the
>  statement:
>  "Class instance variables cannot be referenced from within instance
>  methods and, in general are not very useful"
>
>  huh?..
>  This , in my feeble mind, contradicts everything else I have ever
>  read, except that the example he gives is similar to the @y = 7
>  example below, and in that case, @y is not available to the accessor
>  or any other method that I have played with.
>
>  In the following code, the original assignment of  @x = 7 and @y = 5
>  don't seem to do anything, even with the attr_accessor. I know that
>  both are read by the compiler as I can assign @y = 5/0 and get a
>  division by zero error.
>
>  So, could someone please explain why the accessor for @y does not work
>  here. If I hand write a reader and writer for @y, it works just fine.
>  There are different scopes here, but I had the impression that the
>  accessor would break down that barrier and make @y available
>  throughout the class just as the initialize method is able to access
>  the class variable @x and assign the passed in value. That value is
>  then available to the @x accessor.
>
>  I thought for a while that the @y accessor might work in the singleton
>  class of Myclass, but it doesn't.
>
>  class Myclass
### make this
         class << self
>         attr_accessor :y, :x
         end

Now this is an accessor to the singleton class of the class where the
class instance variables are stored (that is not completely correct,
maybe I shall say from where one has access to them).
>
>         @x = 7
>         @y = 5
>
>         def initialize(new_val= l)
>                 @x = new_val ? new_val : 0
# and this shall read
                    self.class.x = new_val || 0
>         end
>  end
>
>
>  puts mc.y #=> Nil
Myclass.x  --> 7
mc  = Myclass::new( 42 )
Myclass.x    --> 42
mc = Myclass::new 101010
Myclass.x --> 101010
there is of course no mc.x but please see below.

I do however fear that you confuse instance variables with class
instance variables.
The former exist on an per object base and the later on a per class
base ( a class being an object of course ).
For completeness I'll show you how to use the former

class A
    attr_accessor :a
    def initialize; @a = 42 end
end
a= A.new
a.a  --> 42
b = A.new
a.a = 101010
a.a -> 101010
b.a -> 42

HTH
Robert
-- 
http://ruby-smalltalk.blogspot.com/

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein