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
При использовании метода initialize для инициализации атрибутов класса, рекомендуется использовать self для обращения к атрибутам класса, а не "@" перед переменной. Это делается для того, чтобы убедиться, что вы обращаетесь к методу, а не просто к переменной. Поэтому ваш код выглядит правильным:
Таким образом, использование self означает, что вы обращаетесь к методу, а не просто к переменной. Использование "@" перед переменной может привести к нежелательным эффектам, поэтому рекомендуется избегать его в данном контексте.
При использовании метода initialize для инициализации атрибутов класса, рекомендуется использовать self для обращения к атрибутам класса, а не "@" перед переменной. Это делается для того, чтобы убедиться, что вы обращаетесь к методу, а не просто к переменной. Поэтому ваш код выглядит правильным:
def initializeself.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 означает, что вы обращаетесь к методу, а не просто к переменной. Использование "@" перед переменной может привести к нежелательным эффектам, поэтому рекомендуется избегать его в данном контексте.