У мене питання з двох частин
Найкраща практика
- У мене є алгоритм, який виконує певну операцію над структурою даних за допомогою публічного інтерфейсу
- В даний час це модуль з численними статичними методами, всі приватні, за винятком одного методу публічного інтерфейсу.
- Є одна змінна екземпляра, яку потрібно поділити між усіма методами.
Це варіанти, які я бачу, який найкращий ?:
- Модуль зі статичними методами («модуль» в рубіні)
- Клас статичними методами
- Модуль Mixin для включення в структуру даних
- Refactor виділяє частину алгоритму, яка модифікує структуру даних (дуже мала) і робить міксин, який викликає статичні методи модуля алгоритму
Технічна частина
Чи є спосіб зробити приватний метод модуля ?
module Thing
def self.pub; puts "Public method"; end
private
def self.priv; puts "Private method"; end
end
private
Там , здається, не мають ніякого ефекту , я все ще можу назвати Thing.priv
без проблем.
private
впливає лише на методи екземпляра, а не на методи класу. використовувати private_class_method
замість цього:module Thing; def self.pub; end; private_class_method :pub; end