2015-03-08 2 views
1

Рассмотрим этот код:Переменные класса против переменных экземпляра уровня класса

class Polygon 
    @sides=1 
    @@sides = 10 
    class << self; attr_accessor :sides end 
    def self.sides 
    @@sides 
    end 
end 

Если я печатаю sides:

p Polygon.sides 

я 10. Если я изменю порядок class и self.sides, я получу 1. В чем причина такого поведения? Как я могу назвать @@sides или @sides независимо от порядка методов?

редактировать

Я нашел отличную post что обсудить разницу между класса переменных, переменных экземпляра класса и переменные экземпляра.

ответ

1
class << self; attr_accessor :sides end 

эквивалентно:

def self.sides 
    @sides 
end 

def self.sides=(arg) 
    @sides = arg 
end 

Этот метод sides затем получает перезаписаны. Используйте два метода (с разными именами) для доступа к обеим переменным (или помещайте их в массив и возвращайте их в методе).

Смежные вопросы