У меня мало сомнений относительно наилучшего подхода к использованию классов и переменных в Ruby. При сохранении информации в файле, используя для этого определенный класс, я лично сохранял бы соответствующие данные в переменной класса во время создания экземпляра, вместо того, чтобы создавать и вызывать другую функцию напрямую с параметрами.
Поскольку я не совсем понимаю, вот два момента, о которых я говорю:
# from another class, could be called with the following syntax :
# className.new('some params').create
def initialize(params)
@params = params
end
def create
File.open 'data.csv', 'a+' do |file|
file.write @params
end
end
# usage : className.new('some params').create
Другой возможный метод - создать экземпляр класса и передать все параметры путем вызова функции create.
def initialize
end
def create(params)
File.open 'data.csv', 'a+' do |file|
file.write params
end
end
# usage :
class_instance = className.new
class_instance.create 'some params'
С вашей точки зрения, какой метод следует использовать окончательно? В кейсе не хватает производительности? Какие риски при использовании того или иного метода?
Не могли бы вы аргументировать, почему последнее лучше?
Он не создает переменную экземпляра мусора :) Кроме того, всегда лучше сохранять параметры как можно ближе к их использованию.
Верно ли это в случае множественных вызовов? Я имею в виду использование create(params), а затем функции mail(params) из того же класса? Мне пришлось бы обновить две или более информации из моего скрипта, чтобы сделать его правильным, вместо простого обновления моей функции initialize ().
Если несколько вызовов имеют одинаковые параметры, это означает недостаток дизайна. Если параметры отличаются от вызова к вызову, тогда первый подход просто не сработает. И позвольте мне повторить это жирным шрифтом, сделайте метод статическим, чтобы вообще избежать создания экземпляра класса.
Спасибо за ответы, сегодня кое-что узнал;)
Если вы используете @params во всем классе, например. create, mail, log и т. д., тогда ваш первый подход имеет смысл, если вы просто используете метод create для записи их в файл, и все, тогда я соглашусь с @AlekseiMatiushkin (кстати, я скучаю по mudasobwa :)
может ли наследование от класса File быть хоть сколько-нибудь полезным в этом случае? classNew#create - это просто File#open {|file| block}? Читал метод File.open, но плохо разбираюсь в C++

Последний вариант лучше, плюс метод
createдолжен быть методом класса (статическим).