ruby - 所有类方法都是用 "def self.foo"定义的吗?

标签 ruby oop class-method

我的以下想法正确吗?非常感谢建议/反馈!


通过方法名前是否指定了关键字self,我们可以判断哪个方法是实例方法,哪个方法是类方法。

因此,该方法,例如: def self.foo_bar 被定义为类方法。 另一方面,def foo_bar 被定义为实例方法。

最佳答案

不,你不能那样做。考虑一下:

class C
  class << self
    def m
      puts 'pancakes!'
    end
  end
  def i
    puts 'eggs'
  end
end

这为您提供了 C 上的类方法 m,并且该方法的声明中没有“self”。但是,您可以向类(class)询问其方法:

C.methods.include? :m
# true
C.methods.include? :i
# false
C.instance_methods.include? :i
# true

考虑到 Ruby 类的可变性,询问类是确定的唯一方法。

关于ruby - 所有类方法都是用 "def self.foo"定义的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046333/

相关文章:

ruby - 如何找到运行时调用 Ruby 方法的位置?

typescript - Typescript 中的接口(interface)和抽象类有什么区别?

python - 如何在未模拟的类中使用 autospec 修补类方法?

c# - 设计一组使用依赖关系的规则

php - 简单的抽象类概念

ruby-on-rails - 如何创建一个基于实例方法的值对对象进行排序的类/作用域方法?

Python - 如何从类方法中获取类名 - 使用@classmethod

ruby - 我怎么知道我是否在集群模式下运行 Puma?

ruby-on-rails - PHP 魔术方法 __call、__get 和 __set 的 Ruby 等价物

ruby - 安装 Xcode 4.2 后无法使用 native 扩展构建 json (1.6.3)