Просматривая некоторый код Ruby, я заметил методы, объявленные с self.
перед именем метода. Например:
def self.someMethod
//...
end
Что меняет в методе добавление self.
к имени метода?
Просматривая некоторый код Ruby, я заметил методы, объявленные с self.
перед именем метода. Например:
def self.someMethod
//...
end
Что меняет в методе добавление self.
к имени метода?
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
Я. заставляет его стать методом класса, а не методом экземпляра. Это похоже на статические функции в других языках.
self
— не первое ключевое слово, которое я бы связал с методом класса. 23.11.2011self.someVariable
? 23.11.2011@@class_variable
Я бы рекомендовал создать для них методы получения и установки. Этот ответ может быть полезен. stackoverflow.com/questions/895747/ 23.11.2011self.
при доступе к переменной. 23.11.2011