ruby - 在 Ruby 中使用 getter 覆盖方法

标签 ruby inheritance overriding

下面的代码按预期运行,但是它们是否有任何缺点用属性的 getter 覆盖方法(参见下面代码中的 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!"}

最佳答案

attr_reader :action_label 只是定义了一个方法。 Ruby 中的“getter”就是这样的方法

def action_label
  @action_label
end

attr_reader 是定义此类方法的简写。

在子类中重新定义一个方法没有错,这是 OOP 的一大特点。

那也不是NotImplementedError是为了。提高其他东西。

关于ruby - 在 Ruby 中使用 getter 覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52335096/

相关文章:

ruby - 给定n,在ruby中如何求出n为1、3、4之和的不同写法的个数?

javascript - javascript中的递归原型(prototype)继承?

java - 为什么内部类可以覆盖私有(private) final方法?

c++ - 从父对象c++访问子方法

ruby - 尝试安装 bro 页面 : mime-types requires Ruby version >= 1. 9.2

ruby - Rspec 多个规范文件夹

ruby - 我需要一个正则表达式来找到一个不在任何 html 标签或任何 html 标签的属性值内的 url

C++:如何从外部调用父类函数

java - 从父类(super class)型的扩展列表中返回子类型对象的列表

swift - UIBarButtonItem 的属性 "isEnabled"是类扩展中无法识别的选择器