加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Ruby处理抽象类解决方案的正确方法是什么?

发布时间:2020-12-17 01:36:09 所属栏目:百科 来源:网络整理
导读:我知道抽象类不是 Ruby中的一个特性,当然背后有一个哲学原因,但我想知道是否有办法解决通常使用其他语言(如C和Java)中的抽象类来解决的问题. 例如: 我需要三个班级Triangle,Square和Circle.因为这些都是几何图形,所以我在考虑使用抽象方法get_area编写一个
我知道抽象类不是 Ruby中的一个特性,当然背后有一个哲学原因,但我想知道是否有办法解决通常使用其他语言(如C和Java)中的抽象类来解决的问题.

例如:
我需要三个班级Triangle,Square和Circle.因为这些都是几何图形,所以我在考虑使用抽象方法get_area编写一个名为AbstractFigure的抽象类,它将由具体类Triangle,Square和Circle实现.

我如何按照Ruby哲学做到这一点?

解决方法

你是对的,它在ruby中并不像一个明确定义的概念那样存在,不像其他语言如Java那样被大量使用.

但你也是对的,有很多情况需要它.

以下是我的例子 – 用你的例子 –

class AbstractShape
  attr_accessor :edges

  def initialize
    # ...
  end

  def get_area
    raise NoMethodError("Override this implementation")
  end
end


class Square < AbstractShape
   def initialize
     # square-specific stuff
     super
   end

   def get_area
     self.edges * foo * bar
   end
end

关键是要在顶层定义所有可用的方法以提高可读性和一致性,但要确保它们在使用时引发错误.

如果有一种方法绝对肯定会在所有形状中以相同的方式使用,那么在AbstractShape中定义它

attr_accessor也将继承,因此每个形状的每个实例都有@edges可用.但是你仍然可以在AbstractShape类中引用引用@edges的方法,因为它们只会使用正确的本地实例变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读