Руби себя в терминах непрофессионала? - PullRequest
4 голосов
/ 20 апреля 2011

Когда Ruby сам ссылается на Объект, а когда ссылается на класс Ruby? Пояснения с примерами были бы отличными. Я не собираюсь думать об этом.

Ответы [ 3 ]

5 голосов
/ 20 апреля 2011

Классы на самом деле сами являются объектами.Допустим, у меня есть класс Person, на самом деле это экземпляр Class.Таким образом, вы можете сделать так, чтобы self ссылался на экземпляр Article, или вы можете сделать так, чтобы self ссылался на экземпляр класса, Article.

В самом простом примере, который я могу представить:

class Person
  def initialize
    p "Info about Person Instance"
    p self
    p self.class
  end

  p "Info about Person Class"
  p self
  p self.class
end


person = Person.new

Он печатает:

"Info about Person Class"
Person
Class
"Info about Person Instance"
#<Person:0x0000010086cf58>
Person

Чтобы узнать больше о себе, I очень рекомендуем прочитать это.

3 голосов
/ 20 апреля 2011

Я мог бы попытаться объяснить это сам, но я думаю, что Иегуда Кац справляется лучше, чем я:

Метапрограммирование в Ruby: все зависит от самого себя

2 голосов
/ 20 апреля 2011

Мое понимание

  • В средах, где вы определяете методы класса или module_functions, self относится к классу / модулю.
  • В средах, где вы определяете методы экземпляра, self относится к экземпляру.

Например,

class A
  def method1
    self # => instance of A
  end
  def self.method2
    self # => class A
  endu
  def A.method3
    self # => class A
  end
end

class << A
  def method4
    self # => class A
  end
end

module B
  module_function
  def method5
    self # => module B
  end
end

Исключением является то, что instance_eval, instance_exec изменяют self для получателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...