Эта часть работает:
class Example1
@@var1= "var1 in the Example1"
def get_var1
@@var1
end
end
example1 = Example1.new
example1.get_var1
# => "var1 in the Example1"
но если я попробую собственный класс:
def example1.get_var1
@@var1
end
example1.get_var1
# NameError: uninitialized class variable @@var1 in Object
# from (pry):128:in `get_var1'
Руби выглядит @@var1
в Object
вместо Example
.
Я тестировал этот код в Ruby 1.9.3 и 2.0 с тем же результатом.
Почему это происходит?
Во-вторых, можно ли это отключить (чтобы example.get_var1
не искал переменные класса в Объекте)?
singleton
используется для шаблона Singleton. Так что я не вижу здесь проблем. - person Darek Nędza   schedule 01.07.2014Object#singleton_class
. Меня очень огорчает, как много людей, которых я вижу, все еще используютdef metaclass; class << self; self; end; end
, когда у нас так долго было правильное имя и метод для него. - person Max   schedule 01.07.2014