Переопределение метода с помощью геттера в Ruby - PullRequest
0 голосов
/ 14 сентября 2018

Код ниже работает так, как задумано, однако есть ли у них какие-либо недостатки для переопределения метода (см. action_label в приведенном ниже коде) с помощью метода получения атрибута?См. : action_label в коде

class BaseAction
  def action_label
    raise NotImplementedError
  end

  def run
    puts "Running action: #{action_label}"
    yield        
  end
end

class SimpleAction < BaseAction  

  def initialize(label)    
    @action_label = label
  end

  private
  attr_reader :action_label
end

sa = SimpleAction.new("foo")
sa.run {puts "action!"}

1 Ответ

0 голосов
/ 14 сентября 2018

attr_reader :action_label просто определяет метод."getters" в Ruby - это просто методы, подобные этому

def action_label
  @action_label
end

attr_reader - сокращение для определения такого метода.

Нет ничего плохого в переопределении метода в подклассе, это одиниз больших возможностей ООП.

Также это не то, для чего NotImplementedError .Поднять что-нибудь еще.

...