Использование class_attribute при вызове из не перегруженного метода - PullRequest
0 голосов
/ 11 июня 2018

Посмотрите код ниже, вы поймете, чего я пытаюсь достичь:

class Parent
  class_attribute :name
  def self.fun
    puts name
  end
end

class Child < Parent
  self.name = "my name"
  def self.other_func
    self.superclass.fun
    # or Parent.fun
  end
end

Child.other_func

Я не получаю вывод.Если бы имя other_func было забавным, оно напечатало бы «мое имя» на консоли рельсов.Как добиться того же при вызове из other_func?

EDIT В моем классе Child уже есть метод

def self.fun

, который выполняет дополнительную работу надвершина звонка Parent.fun.Так что вызывать напрямую «fun» из «other_func» для меня не вариант.

1 Ответ

0 голосов
/ 11 июня 2018

Конечно, вы получаете nil в качестве вывода, хотя ваш Parent.fun успешно вызван.

Дело в том, что class_attribute не работает, как вы ожидаете, что оно будет работать.Это пролило бы свет на проблему:

class Parent
  class_attribute :name
  self.name = :super
  def self.fun
    puts "super: #{self.name}"
  end
end

class Child < Parent
  self.name = :child
  def self.fun
    puts 'child'
  end 
  def self.other_fun
    Parent.fun
  end
end

Child.other_fun
#⇒ super: super

Тем не менее атрибуты класса не являются производными .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...