«Лучший» (или, точнее, наименее плохой) способ, который я нашел, состоит в том, чтобы извлечь класс объекта с помощью метода «class», а затем вызвать собственный метод. Например:
class Clock
def self.tick
puts "This is self.tick"
end
# Example of call from non-self function to a self-function.
def test
# Note: Call from a member function needs the "self.", otherwise
# "class" will be interpreted as the keyword "class".
self.class.tick
end
end
my_clock = Clock.new
my_clock.test
# Example of a call to a class-self-function from an object.
my_clock.class.tick
Обновление: можно, конечно, позвонить Clock.tick
. Однако явное указание имени класса, когда нет необходимости, усложняет рефакторинг. Это также причина, почему методы класса часто определяются с использованием def self.tick
, а не def Clock.tick
.