Зачем добавлять имена методов Ruby к себе? - PullRequest
2 голосов
/ 23 ноября 2011

Просматривая некоторый код Ruby, я заметил методы, объявленные с self. перед именем метода. Например:

def self.someMethod
  //...
end

Что означает добавление self. к имени метода в методе?

Ответы [ 2 ]

10 голосов
/ 23 ноября 2011

def self.something - это метод класса, вызываемый с помощью:

Class.some_method

def something - это метод экземпляра, вызываемый с помощью:

class = Class.new
class.some_method

Разница в том, что вызывается одиндля самого класса, другой для экземпляра класса.

Чтобы определить метод класса, вы также можете использовать имя класса, однако это усложнит процесс рефакторинга вбудущее как имя класса может измениться.

Пример кода:

class Foo
  def self.a
    "a class method"
  end

  def b
    "an instance method"
  end

  def Foo.c
    "another class method"
  end
end

Foo.a # "a class method"
Foo.b # NoMethodError
Foo.c # "another class method"
bar = Foo.new 
bar.a # NoMethodError
bar.b # "an instance method"
bar.c # NoMethodError
3 голосов
/ 23 ноября 2011

Я. заставляет его становиться методом класса, а не методом экземпляра. Это похоже на статические функции в других языках.

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