2012-04-02 12 views
7

tengo un método que llama a un método en un entero:¿Es posible tener una llamada a un método dinámico para valores de parámetros predeterminados en Ruby?

def print_time(time = 2.days.from_now) 
    puts time 
end 

me trataron en la consola parece que funciona, pero es el código de seguridad? quiero decir por ejemplo:

  • dirigir mi servidor con el almacenamiento en caché caché habilitada
  • que llamo el método que imprime 2 días después
  • 1 horas más tarde el valor impreso va a ser muy 1 hora + 2 días más tarde ?

¿El valor (2.days.from_now) no se evalúa una sola vez cuando se define el método?

¡Gracias por ayudarme a aclarar! :)

Respuesta

2

Bueno, su pregunta no es particularmente clara.

¿Le preocupa el almacenamiento en caché? Obviamente, algo que se evalúa y luego se almacena en caché (es decir, con caché de acciones o almacenamiento en caché de páginas) no se volverá a evaluar hasta que se borre el caché.

¿O le preocupa que el valor del argumento predeterminado esté almacenado en caché cuando define el método, y que todas las llamadas posteriores pueden tener el mismo valor que las predeterminadas? En este caso, la prueba de la consola era válida y @ Linux_iOS.rb.cpp.c.lisp.n (longest.name.evar) es correcto. Ruby evalúa esa expresión cada vez.

Por curiosidad, ¿qué hizo que dudaras de tus propias pruebas en la consola?

+0

Perdón por el nombre ... Lo cambiaría, pero eso rompería bastantes enlaces. – Linuxios

14

Ruby evalúa la expresión cada vez que llamas al método. Entonces, si lo defines el martes y lo llamas el jueves, el resultado será el correcto.

Cuestiones relacionadas