yo estaba tratando de entender esta llamada:¿Cómo funciona este método depreciar?
deprecate :new_record?, :new?
que utiliza este método Desaprobar:
def deprecate(old_method, new_method)
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{old_method}(*args, &block)
warn "\#{self.class}##{old_method} is deprecated," +
"use \#{self.class}##{new_method} instead"
send(#{new_method.inspect}, *args, &block)
end
RUBY
end
Realmente no entiendo la metaprogramming que está siendo utilizado aquí. Pero, ¿se trata simplemente de otra forma de aliasing del método new_record?
? Por lo tanto, en efecto, new_record?
todavía está disponible, pero emite una advertencia cuando lo usa? ¿Alguien quiere explicar cómo funciona esto?
Sí, gracias. Eso tiene sentido. Solo una cosa que todavía no entiendo - esta sintaxis: << - RUBY, __FILE__, __LINE__ + 1 Si "<< - RUBY" inicia el heredoc, ¿para qué sirve el resto? Esta parte: __FILE__, __LINE__ + 1 – Hola
Si cambio la definición de deprecated a: "alias_method: new_record?: New?", ¿Tendrá el mismo efecto que el anterior, excepto que no recibiré la advertencia? – Hola
según mi leal saber y entender, sí. La información __FILE__ y __LINE__ son argumentos de posicionamiento opcionales para class_eval. Si faltaban y se generaba una excepción, la traza inversa incluiría algo como '(eval): 3 new_record?'. __FILE__ es el archivo fuente actual y __LINE__ es el número de línea actual, por lo que en caso de falla, la traza inversa apuntará a donde se definió la declaración eval. –