Если у вас есть
# This won't work
class Foo
def self.blah(string)
puts "self.blah called with a string of #{string}"
end
def some_method
# This won't work
self.blah("hello")
end
end
foo = Foo.new
foo.some_method
Это не сработает, потому что будет искать метод экземпляра Foo#blah
.Вместо этого вы ищете Foo.bar
.
Чтобы сделать some_method
вызов Foo.bar
, вы должны some_method
обратиться к классу Foo
, а затем вызвать blah
для него.
class Foo
def self.blah(string)
puts "self.blah called with a string of #{string}"
end
def some_method
# This will work
self.class.blah("hello")
end
end
foo = Foo.new
foo.some_method
Причина, по которой у вас есть def self.blah
для определения метода, но self.class.blah
для вызова метода, заключается в том, что в первом случае self
относится к классу Foo
, а впоследнее, self
относится к объекту foo
, поэтому вам нужно self.class
для ссылки на класс Foo
.