J'ai une classe qui déstructure la chaîne entrante dans un tableau imbriqué cascade
. Par exemple pour une entrée abcde
, il va produire un tableau [[[[a,b],c],d],e]
. En ce moment, si j'accède à définir une valeur de niveau supérieur de cascade
, la méthode []=(index, value)
de ma classe sera invoquée. Mais j'ai également besoin d'attraper l'accès au tableau imbriqué au sein de cascade
de niveau arbitraire.Ruby: accès à la variable à l'intérieur de la classe
Voir l'exemple ci-dessous, où l'accès x[0][0]
n'appelle évidemment pas une méthode de classe []=
. Alors, est-il possible d'attraper cet accès dans une méthode de classe (ou du moins d'une manière différente)?
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 ~
D'ailleurs, qu'est-ce que vous êtes en train de faire? Il pourrait y avoir un moyen plus simple tout à fait. –