• [^] # Re: Intéressant !

    Posté par . En réponse à la dépêche CAMP 0.7.0 : bibliothèque de réflexion en C++ sous LGPL. Évalué à 2.

    C’est du Ruby, mais j’ai eu besoin de faire un conteneur « typé », c’est à dire qui puisse dire dès l’insertion « hé, tu me donnes le mauvais truc » (mauvais truc étant, dans mon cas, la nécessité d’avoir une méthode, mais on peut imaginer d’autres trucs). Voila le code simplifié:

    class TypedArray < Array
    class << self
    attr_accessor :method
    end

    def <<(item)
    if !item.responds_to? self.class.method
    raise "#{item} does not respond to #{self.class.method}"
    end
    super
    end

    Qui s’utilise comme ça
    ArrayDelegate = Class.new TypedArray
    ArrayDelegate.method = :delegate=
    my_array = ArrayDelegate.new
    my_array.is_a? ArrayDelegate # Et ne doit pas répondre oui pour une autre sous-classe de TypedArray, comme un ToStringArray