如何从Rational(或任何没有构造函数的类)继承?

ck

我可以轻松地继承,String例如,像这样:

class MyString < String
  def stuff
    self + ' and stuff'
  end
end

# This works:
MyString.new('things').stuff # => 'things and stuff'

但是,如何从Rational没有构造函数的继承例如:

def MyRat < Rational
  def inc
    self + 1
  end
end

# I have tried to initialize like this:
MyRat.new(10).inc # => NoMethodError: undefined method `new' for MyRat:Class
MyRat(10).inc # => NoMethodError: undefined method `MyRat' for main:Object
MyRat.send(:initialize, 10).inc  # => TypeError: already initialized class
# ???
# None of it works!

我找不到初始化我的新类的方法。

西蒙妮·卡莱蒂(Simone Carletti)

您可以将自己的对象定义为周围的代理Rational

class MyRat < BasicObject
  def initialize(value)
    @rational = Rational(value)
  end

  def inc
    @rational + 1
  end

  def method_missing(name, *args, &block)
    @rational.send(name, *args, &block)
  end
end

将使用您的类中定义的方法,否则该类将委托给有理实例。

r = MyRat.new(10)

# MyRat#inc is used
r.inc
# => (11/1) 

# to_int delegates to Rational
r.to_int
# => 10 

因为Numeric没有初始化的部分解释在此线程中可用

查看C代码,我发现new()存在于Numeric和Float中,但已将其专门删除:rb_cInteger = rb_define_class(“ Integer”,rb_cNumeric); rb_undef_alloc_func(rb_cInteger); rb_undef_method(CLASS_OF(rb_cInteger),“ new”);

#....and for floats..
rb_undef_alloc_func(rb_cFloat);
rb_undef_method(CLASS_OF(rb_cFloat), "new");

ruby源代码中没有删除新内容的说明。这就是为什么我想知道这背后的原因是什么。在ruby解释器中,这似乎不是技术限制。目前,这对我来说意义不大。

原因是因为

这是内部优化。Fixnums不必创建,也不必进行GC处理。与普通对象相比,这使数学运算速度大大提高(至少对于Fixnums而言)。

本文“完整数值类”中介绍了其他建议和替代方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

继承没有任何构造函数的抽象类

来自分类Dev

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

来自分类Dev

如何在dart中使用抽象类执行继承?错误:超类SpanishData没有零参数构造函数

来自分类Dev

没有默认构造函数的继承?

来自分类Dev

对于没有任何构造函数的类,在C ++ 11中自动生成的类成员函数

来自分类Dev

如何检查没有参数的类的构造函数

来自分类Dev

没有任何构造函数的JVM字节码类是否有效?

来自分类Dev

Lookup <TKey,TElement>类没有公共构造函数的任何好的理由?

来自分类Dev

继承List <T>时,如何在没有构造函数的情况下将数据传递给父类?C#

来自分类Dev

使用构造函数或没有构造函数导出类

来自分类Dev

类构造函数 - 没有构造函数的实例

来自分类Dev

继承和复制构造函数-如何从基类初始化私有字段?

来自分类Dev

C++ :: 如何创建具有多重继承的类的构造函数?

来自分类Dev

没有默认构造函数的类的向量

来自分类Dev

实例化没有构造函数的类

来自分类Dev

没有默认构造函数的 Java 类

来自分类Dev

从基类继承构造函数?

来自分类Dev

继承类的构造函数的格式

来自分类Dev

从类构造函数javascript继承

来自分类Dev

从C ++中的私有模板类继承构造函数

来自分类Dev

具有不同构造函数的继承类

来自分类Dev

在继承的类中具有参数的最佳实践构造函数

来自分类Dev

如何防止AutoFixture的GuardClauseAssertion检查继承的类中的构造函数?

来自分类Dev

如何使用基本构造函数实例化继承的类?

来自分类Dev

如何在没有默认构造函数的情况下实现抽象类的Decorator类?

来自分类Dev

如何在没有默认构造函数的情况下实现抽象类的Decorator类?

来自分类Dev

如果没有任何返回类型,构造函数将如何返回?

来自分类Dev

TypeScript:如何在没有构造函数的类中内部调用静态函数?

来自分类Dev

通过派生类构造函数继承访问自己的私有构造函数

Related 相关文章

  1. 1

    继承没有任何构造函数的抽象类

  2. 2

    当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

  3. 3

    如何在dart中使用抽象类执行继承?错误:超类SpanishData没有零参数构造函数

  4. 4

    没有默认构造函数的继承?

  5. 5

    对于没有任何构造函数的类,在C ++ 11中自动生成的类成员函数

  6. 6

    如何检查没有参数的类的构造函数

  7. 7

    没有任何构造函数的JVM字节码类是否有效?

  8. 8

    Lookup <TKey,TElement>类没有公共构造函数的任何好的理由?

  9. 9

    继承List <T>时,如何在没有构造函数的情况下将数据传递给父类?C#

  10. 10

    使用构造函数或没有构造函数导出类

  11. 11

    类构造函数 - 没有构造函数的实例

  12. 12

    继承和复制构造函数-如何从基类初始化私有字段?

  13. 13

    C++ :: 如何创建具有多重继承的类的构造函数?

  14. 14

    没有默认构造函数的类的向量

  15. 15

    实例化没有构造函数的类

  16. 16

    没有默认构造函数的 Java 类

  17. 17

    从基类继承构造函数?

  18. 18

    继承类的构造函数的格式

  19. 19

    从类构造函数javascript继承

  20. 20

    从C ++中的私有模板类继承构造函数

  21. 21

    具有不同构造函数的继承类

  22. 22

    在继承的类中具有参数的最佳实践构造函数

  23. 23

    如何防止AutoFixture的GuardClauseAssertion检查继承的类中的构造函数?

  24. 24

    如何使用基本构造函数实例化继承的类?

  25. 25

    如何在没有默认构造函数的情况下实现抽象类的Decorator类?

  26. 26

    如何在没有默认构造函数的情况下实现抽象类的Decorator类?

  27. 27

    如果没有任何返回类型,构造函数将如何返回?

  28. 28

    TypeScript:如何在没有构造函数的类中内部调用静态函数?

  29. 29

    通过派生类构造函数继承访问自己的私有构造函数

热门标签

归档