Так называемые «методы класса» не являются статическими методами.
Когда вы делаете
class MyClass
def self.do_something
# Do awesome stuff
end
end
self
просто ссылается на MyClass
.(Сделайте class MyClass; puts self.inspect; end
, если вы мне не верите!) Вы можете заменить self
на MyClass
или даже что-то, что относится к классу MyClass, и вы получите тот же результат.
Вы можете сделать
class MyClass
end
foo = MyClass
def foo.do_something
# Do awesome stuff
end
, и вы получите те же результаты.
И вы можете делать то же самое с чем-то, что не является классом
my_string = "HAI WORLD"
def my_string.do_something
# Yet more awesome stuff
end
и затем вы можете вызвать my_string.do_something
Будет ли вызов do_something
для my_string
статическим методом?
Так что self
магическим образом не делает метод статическим.