У меня есть класс, который деконструирует входящую строку во вложенный массив cascade
. Например, для ввода abcde
он будет производить массив [[[[a,b],c],d],e]
.Ruby: доступ к переменной внутри класса
Только сейчас, если я получаю доступ к настройке любого значения верхнего уровня cascade
, будет вызван метод []=(index, value)
моего класса. Но мне также нужно поймать доступ к вложенному массиву в пределах cascade
произвольного уровня.
См. Пример ниже, где доступ к x[0][0]
явно не вызывает метод класса []=
. Итак, можно ли поймать этот доступ в методе класса (или, по крайней мере, по-другому)?
class MyClass
attr_accessor :cascade
def initialize string
build_cascade string.split(//)
end
def build_cascade array
if array.length > 2
array[0] = array[0..1]
array.delete_at(1)
build_cascade array
else
@cascade = array
end
end
def []=(index, value)
puts 'You\'ve just tried to set \''+value.to_s+'\' for \''+index.to_s+'\' of @cascade!'
end
def [](index)
@cascade[index]
end
end
x = MyClass.new('abcdefghigk')
puts x.inspect
x[0] = 5 # => You've just tried to set '5' for '0' of @cascade!
x[0][0] = 10 #= > ~ no output ~
Кстати, что это на самом деле вы делаете? Там может быть более простой способ. –