![]() |
1
122
最后我想插一句,我认为没有理由阻止某人实例化抽象类, especially because they can add methods to it on the fly Duck类型语言,如Ruby,在运行时使用方法的存在/不存在或行为来确定是否应该调用它们。因此,你的问题,因为它适用于一个摘要 方法 ,有道理
这应该是故事的结尾了。在Java中使用抽象类的唯一原因是坚持某些方法是“填充”的,而其他方法的行为是在抽象类中。在duck类型语言中,重点是方法,而不是类/类型,因此您应该将您的担忧转移到这个级别。
|
![]() |
2
61
我不喜欢在Ruby中使用抽象类(几乎总是有更好的方法)。但是,如果您真的认为这是解决这种情况的最佳技术,那么可以使用以下代码片段更明确地说明哪些方法是抽象的:
|
![]() |
3
46
试试这个:
|
![]() |
4
20
|
![]() |
5
18
|
![]() |
6
13
My 2:我选择简单、轻量级的DSL混音:
当然,在这种情况下,为初始化基类添加另一个错误是微不足道的。 |
![]() |
7
13
在最近6年半的Ruby编程中,我没有 需要 如果您认为您需要一个抽象类,那么您在提供/需要抽象类的语言中考虑的太多了,而不是在Ruby中。
|
![]() |
8
7
您可以尝试3种rubygems:
|
![]() |
10
4
|
![]() |
11
4
如果要使用不可实例化的类,请在抛出错误之前,在A.new方法中检查self==A。
|
![]() |
12
4
另一个答案是:
正如其他海报所说,您可能应该使用mixin,而不是抽象类。 |
![]() |
13
3
我是这样做的,所以它重新定义了new on child类,以找到一个新的on非抽象类。
|
![]() |
14
3
示例(来自 README.md
|
![]() |
15
1
另一种方法是将所有这些功能放在一个模块中,正如您所提到的,这是无法灌输的。然后将模块包含在类中,而不是从另一个类继承。然而,这将打破像超级的东西。
|
![]() |
16
1
|
![]() |
17
1
虽然这感觉不像Ruby,但您可以这样做:
|
![]() |
cluster1 · 采取独立的新行动的好处是什么? 6 月前 |
![]() |
Robert · 使用JSON或哈希时,将NULL替换为NIL 6 月前 |
![]() |
lucycoco · 如何解决pod安装问题并成功运行pod安装? 10 月前 |
![]() |
Vessel · Ruby-包含任意数量元素的所有排列 10 月前 |