(Ruby, Rails) Контекст SELF в модулях и библиотеках...?
Быстрый вопрос об использовании "САМО" внутри модуля или библиотеки. В основном, какова область/контекст "SELF", поскольку она относится к модулю или библиотеке и как ее правильно использовать? Для примера того, что я говорю, проверьте модуль "AuthenticatedSystem", установленный с "restful_authentication".
ПРИМЕЧАНИЕ. Я знаю, что "я" приравнивается к 'this' на других языках и как "я" работает над классом/объектом, однако в контексте модуля/библиотеки нет ничего "я". Итак, каков контекст "я" внутри чего-то вроде модуля, где нет класса?
Ответы
Ответ 1
В модуле:
Когда вы видите 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
Ответ 2
Для краткого резюме...
http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self
self также используется для добавления методов класса (или статических методов для людей С#/Java). Следующий фрагмент добавляет метод, называемый do_something, к текущему объекту класса (статический)...
class MyClass
def self.do_something # class method
# something
end
def do_something_else # instance method
end
end