【发布时间】:2011-05-19 23:09:42
【问题描述】:
我知道self 是实例方法中的实例。那么,self 是类方法内部的类吗?例如,以下内容可以在 Rails 中使用吗?
class Post < ActiveRecord::Base
def self.cool_post
self.find_by_name("cool")
end
end
【问题讨论】:
-
并添加到以下答案中,因为除非指定,否则 ruby 将始终将接收器评估为 self,您的上述代码可以在没有 self 的情况下调用
find_by_name:) -
谢谢,在某些情况下指定
self是个好主意吗?self.find_by_name是 Ruby 寻找find_by_name的第一个位置吗?它看起来在其他地方吗?在全局定义的方法中(在类之外的文件中定义的方法)呢? -
我测试过了。似乎优先顺序是类方法,如果没有找到类方法,然后是全局定义的方法。
-
我创建了一个显示the method lookup order in Ruby 的图表。您可能会发现它很有用。
-
至少在 Ruby 1.9.2 中,“全局定义”方法实际上是
Object上的私有方法。例如:def foo; end; Object.private_methods.include?(:foo) # => true。这意味着它们基本上最终位于继承链的顶部,并且是最后被找到的。
标签: ruby class instance self class-method