Ruby attr_accessor: имя на: имя [] массив
-
14-10-2019 - |
Вопрос
Как я бы создал ATTR_ACCORSOR для массива?
Например
class MyClass
attr_accessor :my_attr_accessor
def initialize()
end
def add_new_value(new_array)
@my_attr_accessor += new_array
return @my_attr_accessor
end
end
my_class = MyClass.new
my_class.my_attr_accessor = 1
my_class.my_attr_accessor[1] = 2
my_class.my_attr_accessor.push = 3
my_class.add_new_value(5)
my_class.my_attr_accessor
=> [1, 2, 3, 5]
Решение
Просто используйте переменную экземпляра, которая указывает на массив и сделайте аксессу с этой переменной экземпляра.
В вашем классе есть что -то вроде этого:
attr_accessor :my_attr_accessor
def initialize
@my_attr_accessor = []
end
Обратите внимание, что использованиеattr_accessor
позволит вам изменить значение переменной. Если вы хотите убедиться, что массив останется, используйте attr_reader
на месте attr_accessor
. Анкет Вы по -прежнему сможете получить доступ и устанавливать элементы массива и выполнять операции на массиве, но вы не сможете заменить его на новое значение и использовать +=
Для конкатенации не будет работать.
Другие советы
Если вы в порядке с массивом, всегда существующим, @David4dev - это хороший. Если вы хотите, чтобы массив был только в существовании при первом использовании, и никогда не хотите, чтобы пользователь мог заменить его новым массивом (через задание):
class MyClass
def my_attr_accessor
@my_attr_accessor ||= []
end
def add_new_value( value )
my_attr_accessor << value
end
def add_new_values( values_array )
my_attr_accessor.concat values_array
end
end
Пользователь все еще может позвонить my_class.my_attr_accessor.replace( [] )
Чтобы стереть это.