Чим відрізняються cтатичні методи від singleton методів?

Статичні методи і методи singleton є різними концепціями в програмуванні. В Ruby термін “singleton methods” має інший сенс, ніж у деяких інших мовах програмування. У Ruby singleton методи (також відомі як “eigenclass methods” або “методи на рівні класу”) - це методи, які визначаються тільки для конкретного об’єкта. Тобто це методи, які призначені тільки для одного екземпляра класу. Отже, вони відрізняються від методів класу, які визначаються для всього класу.

Давайте розглянемо відмінності між статичними методами та singleton методами в Ruby:

Призначення

  • Статичні методи. Визначаються на рівні класу і викликаються на самому класі. Вони не можуть бути викликані на екземплярі класу.
  • Singleton методи в Ruby. Визначаються тільки для конкретного об’єкта (екземпляра класу) і викликаються лише на цьому об’єкті.

Визначення:

  • Статичні методи. Визначаються за допомогою ключового слова def без визначення об’єкта (наприклад, def self.static_method).
  • Singleton методи в Ruby. Визначаються для конкретного об’єкта за допомогою використання спеціальної синтаксичної конструкції, що викликає “singleton class” (клас для конкретного об’єкта) і потім визначає метод (наприклад, def obj.singleton_method).
    Виклик
  • Статичні методи/ Викликаються на класі (наприклад, Class.static_method).
  • Singleton методи в Ruby. Викликаються на конкретному об’єкті (наприклад, obj.singleton_method).

Приклад статичного методу в Ruby:

class MyClass
  def self.static_method
    puts "This is a static method"
  end
end

# Виклик статичного методу
MyClass.static_method

Приклад singleton методу в Ruby:

obj = Object.new

def obj.singleton_method
  puts "This is a singleton method"
end

# Виклик singleton методу
obj.singleton_method

Зверніть увагу, що у Ruby використовується конструкція def obj.singleton_method , яка визначає метод тільки для конкретного об’єкта obj .