【问题标题】:Why alias_method is an instance method?为什么 alias_method 是实例方法?
【发布时间】:2013-07-22 16:01:27
【问题描述】:

下面是alias_method的典型用法,

class A
def say
    puts 'say'      
end

alias_method :talk, :say
end

alias_method 是 Module 类中定义的私有 instance 方法,但在上面的代码中,它更像是一个 class 方法而不是 instance方法,为什么上面的代码有效?

【问题讨论】:

  • 你使用stackoverflow已经两个月了,问了三个问题,没有接受任何答案。如果到目前为止您对任何一个答案都不满意,那没关系,但如果任何一个答案是正确的,请采纳。

标签: ruby


【解决方案1】:

如你所见,它是A 的类方法,同时也是Module 类的实例方法,Class 类是其子类。类方法不是实例方法独有的。所有类方法都是Class 类的实例方法,除非它们是单例类上的方法。

在上面的例子中,alias_method 是在 Module 类上定义的。因此,A,它是Module 的一个实例,可以作为对alias_method 的方法调用的接收者。但是由于这个方法是私有的,所以接收者需要隐式。

【讨论】:

  • 在Ruby中,每个类都是Class类的一个实例,在我的例子中,A类是Class的一个实例,因为Module是Class的基类,那么A就是Module的一个实例,真的吗?如果是这样,我就可以理解Module的私有实例方法为什么会变成A的类方法了。还有一个问题:既然Object是Module的基类,那么Object的所有实例方法都会变成A类的类方法,对吗?
  • 确实如此。
猜你喜欢
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2020-08-03
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多