Посмотрите на контроллер управления системой. У меня под рукой нет MBP, но я считаю, что вам нужно взглянуть на smc.h
В module:
Когда вы видите self
в методе экземпляра, это относится к экземпляру класса, в который включен модуль.
Когда вы видите self
вне метода экземпляра, это относится к модулю.
module Foo
def a
puts "a: I am a #{self.class.name}"
end
def Foo.b
puts "b: I am a #{self.class.name}"
end
def self.c
puts "c: I am a #{self.class.name}"
end
end
class Bar
include Foo
def try_it
a
Foo.b # Bar.b undefined
Foo.c # Bar.c undefined
end
end
Bar.new.try_it
#>> a: I am a Bar
#>> b: I am a Module
#>> c: I am a Module
Вкратце ... http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self
self также используется для добавления методов класса (или статических методов для пользователей C # / Java). Следующий фрагмент добавляет метод do_something к объекту текущего класса (статический) ...
class MyClass
def self.do_something # class method
# something
end
def do_something_else # instance method
end
end