在扩展自身的模块的实例方法内调用单例方法

马尔科·阿夫利亚什

我自己进行了扩展Kernel,在实例方法的定义中Kernel#abort,我称为单例方法Kernel.abort

module Kernel
  extend self

  def abort
    puts "Press ENTER to exit..."
    gets
    Kernel.abort
  end
end

abort

当我调用时Kernel#abortKernel.abort方法定义内调用似乎引用了原始对象Kernel#abort(扩展为Kernel.abort)。

Ruby如何知道我写的Kernel.abort是原始abort方法,而不是我刚刚创建的方法?如何递归调用abort刚创建的新方法?

戴夫·史威斯古斯

Kernel.abort首先定义一个实例方法Kernel#abort,然后再使它成为单例方法来定义module_function在Rubinius中肯定是这种情况;我在MRI源中找不到它,但请参阅下文。)module_function 制作了该方法的一个副本重新abort定义时,您将重新定义实例方法,而不是单例副本。

Object包含Kernel,因此当您说abort得到重新定义的实例方法时,但是当您说Kernel.abort没有得到重新定义的单例方法时。

如果您确实想在中使用递归abort,或者只是为了证明此解释是正确的,请module_function :abort在重新定义方法后调用单例方法将更新为与实例方法相同,并且两个方法都将递归。

请注意,您无需extend self重新定义的实例版本abort由于Kernel已包含在中Object,因此您只需为所有对象重新定义实例方法即可查看重新定义的版本。另一方面,如果一开始Kernel曾经使用extend self过曝光#abort,我们可以重新定义它而没有任何复杂性。

以下内容证明了用户定义的纯Ruby方法缺乏递归,即module_function负责任的和本机方法不是:

$ cat foo.rb
module Foo
  def bar
    puts "old version"
  end
  module_function :bar
end

module Foo
  def bar
    puts "new version"
    Foo.bar
  end
end

Object.include Foo
bar
$ ruby foo.rb
new version
old version

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何调用单例方法?

来自分类Dev

从单例调用 Fragment 方法

来自分类Dev

在其方法中获取单例实例

来自分类Dev

OCMockito存根单例共享实例方法

来自分类Dev

Angular 2 onInit中的单例类方法调用与in方法

来自分类Dev

多线程单例:实例方法是否需要互斥体?

来自分类Dev

如何通过单例实例方法返回不同的类型

来自分类Dev

在特定间隔内调用方法

来自分类Dev

尝试在函数内调用方法

来自分类Dev

Unity“ ContainerControlled”单例和多线程方法调用

来自分类Dev

并行/多线程单例对象方法调用

来自分类Dev

可以同时从多个线程调用单例对象的方法吗?

来自分类Dev

初始化完成前在单例上调用方法

来自分类Dev

单例方法与类方法

来自分类Dev

从自身调用方法或函数?

来自分类Dev

使用枚举版本单例模式时,修改单例类代码是扩展单例功能的唯一方法吗?

来自分类Dev

Dagger 中的单例方法

来自分类Dev

在其对象内调用对象的方法

来自分类Dev

在全局范围内调用静态方法

来自分类Dev

在控制器内调用方法模型

来自分类Dev

Swift:在init内调用self方法

来自分类Dev

反射:在静态字段内调用方法

来自分类Dev

调用对自身调用方法的父方法?

来自分类Dev

NullReferenceException单例实例

来自分类Dev

单例方法和类方法 Java

来自分类Dev

在Managed C ++中,在类中定义静态单例实例的正确方法是什么?

来自分类Dev

将单例实例作为静态字段与getInstance()方法中的静态变量进行比较

来自分类Dev

在Scala中,是否有任何方法可以检查实例是否为单例对象?

来自分类Dev

使用随机数生成器:多个实例还是单例方法?

Related 相关文章

热门标签

归档