Подтвердить что ты не робот

(Ruby, Rails) Контекст SELF в модулях и библиотеках...?

Быстрый вопрос об использовании "САМО" внутри модуля или библиотеки. В основном, какова область/контекст "SELF", поскольку она относится к модулю или библиотеке и как ее правильно использовать? Для примера того, что я говорю, проверьте модуль "AuthenticatedSystem", установленный с "restful_authentication".

ПРИМЕЧАНИЕ. Я знаю, что "я" приравнивается к 'this' на других языках и как "я" работает над классом/объектом, однако в контексте модуля/библиотеки нет ничего "я". Итак, каков контекст "я" внутри чего-то вроде модуля, где нет класса?

4b9b3361

Ответ 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