la definición del módulo se evalúa como 'esto es ...', ¿por qué?
En Ruby, todo es una expresión, no hay declaraciones o declaraciones. Lo que significa que todo evalúa a un valor. (Sin embargo, esto no significa necesariamente que se evalúa como un valor útil . Por ejemplo, el método puts
da siempre como resultado nil
, al igual que una expresión definición def
método (excepto en Rubinius, donde la expresión se evalúa como un def
CompiledMethod
objeto para el método que se está definiendo).)
Por lo tanto, si todo se evalúa a un valor, ¿qué debería evaluar una expresión de definición de módulo? Bueno, hay un par de candidatos: podría evaluar a nil
, al igual que una expresión de definición de método. O podría evaluar el objeto del módulo en sí, después de todo, este es lo que estamos definiendo, ¿verdad? Pero en realidad, Matz eligió una tercera opción: las expresiones de definición de módulo (y clase) realmente evalúan a lo que sea la última expresión dentro del cuerpo de definición de módulo evaluado. (Esto le permite simular fácilmente las otras dos posibilidades simplemente poniendo nil
o self
como la última expresión dentro de un cuerpo de definición de módulo.)
En su caso, la última expresión dentro del cuerpo de definición del módulo es una asignación. Pero, ¿una tarea? ¿Qué diablos hace que devolver? ¿No es eso una declaración? No, no en Ruby. Todo es una expresión y las asignaciones no son una excepción: las expresiones de asignación se evalúan según lo que evalúa el lado derecho. Aquí, el lado derecho de la expresión de asignación es un literal de cadena, que se evalúa como un objeto de cadena.
Por lo tanto, toda la expresión de definición de módulo evalúa la cadena 'this is a const in module'
.
para un solo uso desechable, que puede hacer 'Object.new.extend (ModeName) .aux' – AJcodez