Pergunta

Existe um método padrão ou acessor classe que eu posso adicionar a uma classe Ruby que são chamados se um acessor (Rubi como propriedade) não sai? Posso, então, escrever algum código personalizado para responder De como uma lista de matriz ler a partir de um banco de dados onde o valor pode ser acessado como um assessor sem me escrever o código de assessor (pois se ler a partir de um banco de dados de seu desconhecido).

Usando o Ruby MRI 1.9

Obrigado!

Foi útil?

Solução

Sim, ele é chamado method_missing; ele é chamado sempre que um método não definido é utilizado. Você pode usá-lo para adicionar ou imitar qualquer método que quiser, incluindo assessores.

Por exemplo, se você jogar isso em uma Hash você pode tratar o conteúdo do hash como propriedades:

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

Vamos você escreve:

h.bob = "Robert"

e

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

e assim por diante, além do estilo mais normal h[:bob] = ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top