如何实施抽象类 ruby?
我知道 ruby 没有抽象类的概念。 但如果它根本应该实施,怎么做? 我尝试了......
但是当我尝试创建一个实例时 B, 他在内部原因
, 这会导致例外。
此外,模块无法通过副本创建,但它们也无法继承。 使新方法Privatat不起作用。 有些说明?
class A
def self.new
raise 'Doh! You are trying to write Java in Ruby!'
end
end
class B < A
...
...
end
但是当我尝试创建一个实例时 B, 他在内部原因
A.new
, 这会导致例外。
此外,模块无法通过副本创建,但它们也无法继承。 使新方法Privatat不起作用。 有些说明?
没有找到相关结果
已邀请:
17 个回复
快网
赞同来自:
http://asqyzeron.wordpress.com ... time/
.
鸭肉套装语言如 Ruby, 使用存在/执行期间的方法的缺失或行为,以确定它们是否应被调用。 所以你的问题是因为它是指抽象
方法
, 有意思
而且这个故事应该结束。 在java中使用抽象类的唯一原因在某些方法得到的事实上 "filled-in", 虽然其他人在抽象课上有他们的行为。 在鸭子集的语言中侧重于方法,而不是 classes/types,, 因此,您必须推迟您对此级别的疑虑。
在您的问题中,您主要尝试重新创建关键字
的 Java, 这是执行的闻名代码 Java 在 Ruby.
冰洋
赞同来自:
原则上,你只是打电话
使用抽象方法列表,当它们被称为抽象类的实例时,出现了异常
.
窦买办
赞同来自:
诸葛浮云
赞同来自:
快网
赞同来自:
三叔
赞同来自:
发布
抽象课程。
如果您认为您需要抽象类,则您认为提供给他们的语言太多/要求,不在 Ruby 因此。
作为其他,混合更适合必须是界面的东西。 /正如他们所确定的那样 Java/, 和你的设计的重新思考更适合那些事情 "need" 来自其他语言的抽象类,如 C++.
更新 2019: 我不需要抽象课程 Ruby 为了 16 半年的使用。 所有人都评论我的答案评论的所有这些都是通过实际学习解决的 Ruby 并使用模块等适当的工具 /甚至为您提供一般实施/. 在我管理的团队中,有些人创建了没有基本实现的课程 /例如,一个抽象类/, 但这基本上是浪费代码,因为
将完全相同的结果
在生产中。
江南孤鹜
赞同来自:
当然,在这种情况下,添加另一个初始化基本类的错误将是微不足道的。
君笑尘
赞同来自:
http://rubygems.org/gems/interface
http://rubygems.org/gems/abstract
https://rubygems.org/gems/simple_abstract
帅驴
赞同来自:
郭文康
赞同来自:
但实际上,模块更像是你需要的东西 — 例如,枚举是可以成为其他语言的抽象类的东西。 从技术上讲,你不能将它们归类,但挑战
达到同样的目的。 没有任何理由为什么它不适合你?
裸奔
赞同来自:
我的指针是:使用
http://www.rubycentral.com/pic ... .html
, 不是继承。
董宝中
赞同来自:
我仍然没有看到使用抽象课程的任何实际好处 ruby.
冰洋
赞同来自:
这取决于通常的 #method_missing 报告未实现的方法,
但不允许实施抽象课程 /即使他们有一种方法 initialize/
像其他海报一样,您可能必须使用Mixin,而不是抽象类。
</nomethoderror:></b:0x24ea0>
窦买办
赞同来自:
gem, 允许不引人注目地声明抽象类和模块。
例子 /从文件。 README.md/:
龙天
赞同来自:
https://rubygems.org/gems/abstract
知食
赞同来自:
另一种方法是将您提到的模块中的所有这些功能放在您所提到的模块中,永远不会被激怒。 然后将模块打开到您的类中,而不是从另一个类继承它。 但是,它会使超级的东西打破这样的东西。
所以这一切都取决于你想如何训练它。 虽然模块似乎是解决问题的更清洁的解决方案 "我怎样才能写一些辩叉使用其他课程的东西"
窦买办
赞同来自:
结果:
</b:0x00007f80620d8358>