Question

Existe-t-il un accesseur de méthode ou de classe par défaut que je peux ajouter à une classe Ruby appelée si un accesseur (propriété semblable à Ruby) ne se ferme pas? Je peux ensuite écrire du code personnalisé pour répondre, comme une liste de tableaux lue dans une base de données où la valeur peut être consultée comme un accesseur sans que je ne rédige le code de l'accesseur (car si lu dans une base de données, son inconnu).

Utilisation de Ruby MRI 1.9

Merci!

Était-ce utile?

La solution

Oui, cela s'appelle method_missing ; il est appelé chaque fois qu'une méthode non définie est utilisée. Vous pouvez l'utiliser pour ajouter ou émuler n'importe quelle méthode, y compris les accesseurs.

Par exemple, si vous utilisez ceci sur un Hash , vous pouvez traiter le contenu du hachage en tant que propriétés:

h = {}
def h.method_missing(*args)
    if args.length == 1
        self[args[0]]
      elsif args.length == 2 and args[0].to_s =~ /^(.*)=$/
        self[$1.intern] = args[1]
      else
        super
      end
    end

laissez-vous écrire:

h.bob = "Robert"

et

if h.bill == "William" ...

et ainsi de suite en plus du style plus normal de h [: bob] = ... .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top