Self или @ для атрибута класса? Доброго времени суток!
По текущему вопросы было прочитано куча статей и был перерыт весь гугл вкупе с Ruby Way, но конкретно я так и не понял - что к чему.
Вопрос в следующем:
Насколько будет правильным или же неправильным использование self в методе initialize для атрибутов класса?
И будет ли нарушением, если, скажем, мы будем ставить "@" перед атрибутами, а не self?
Судя по всему изученному и прочитанному, я делаю вывод, что ставить нужно self, ибо мы вызываем метод, а не обращаемся к самой переменной. Соответственно, "@" нужно ставить при обращении к переменной как к get'теру, а не как к set'теру.
Прошу рассудить.
Заранее, благодарю!class Log_parse
attr_accessor :dir, :input_filename, :output_filename, :result_filename,
:src_ip_final_table, :dst_ip_final_table,
:proto_final_table, :service_port_final_table
def initialize
self.dir = ""
self.output_filename = []
self.input_filename =
[
'01_02_2019.txt', '05_02_2019.txt',
'07_02_2019.txt', '09_02_2019.txt',
'11_02_2019.txt', '13_02_2019.txt',
'15_02_2019.txt', '18_02_2019.txt',
'20_02_2019.txt', '21_02_2019.txt',
'24_02_2019.txt', '26_02_2019.txt',
'28_02_2019.txt'
]
@input_filename.each_with_index do |filename, iterator|
self.output_filename[iterator] = @dir + 'output_' + filename
end
self.src_ip_final_table = []
self.dst_ip_final_table = []
self.proto_final_table = []
self.service_port_final_table = []
end
# ...
end

21 Авг 2019 в 06:58
184 +1
0
Ответы
1

При использовании метода initialize для инициализации атрибутов класса, рекомендуется использовать self для обращения к атрибутам класса, а не "@" перед переменной. Это делается для того, чтобы убедиться, что вы обращаетесь к методу, а не просто к переменной. Поэтому ваш код выглядит правильным:

def initialize
self.dir = ""
self.output_filename = []
self.input_filename =
[
'01_02_2019.txt', '05_02_2019.txt',
'07_02_2019.txt', '09_02_2019.txt',
'11_02_2019.txt', '13_02_2019.txt',
'15_02_2019.txt', '18_02_2019.txt',
'20_02_2019.txt', '21_02_2019.txt',
'24_02_2019.txt', '26_02_2019.txt',
'28_02_2019.txt'
]
@input_filename.each_with_index do |filename, iterator|
self.output_filename[iterator] = @dir + 'output_' + filename
end
self.src_ip_final_table = []
self.dst_ip_final_table = []
self.proto_final_table = []
self.service_port_final_table = []
end

Таким образом, использование self означает, что вы обращаетесь к методу, а не просто к переменной. Использование "@" перед переменной может привести к нежелательным эффектам, поэтому рекомендуется избегать его в данном контексте.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир