2012-08-15 9 views

Respuesta

18

Constructor implementa una versión de method_missing que añade etiquetas dadas por el nombre de la llamada al método.

Suponiendo que está jugando en la IRB (o consola de rieles), el comportamiento predeterminado del IRB cuando se evalúa una expresión (como Builder::XmlMarkup.new) es llamar inspect en él, con el fin de generar una cadena para mostrar a usted. En el caso del constructor, inspect no es el método habitual de ruby ​​inspect - se trata de method_missing y agrega la etiqueta.

Esto solo ocurrirá cuando juegues con ruby ​​de forma interactiva. Puede hacer cosas como

xml = Builder::XmlMarkup.new; false 

Aquí el resultado de la expresión es false llamadas, de modo que el IRB inspect y sale de su objeto constructor solo.

Puede ser incómodo seguir haciendo esto continuamente. Si lo hace

xml = Builder::XmlMarkup.new; false 
def xml.inspect; target!; end 

continuación xml todavía habrá un objeto constructor que deben mostrarse su contenido en la inspección efectuada por el IRB. No podrá crear etiquetas llamadas inspect (que no sean el tag!), pero eso suele ser un inconveniente menor.

+2

No se puede conseguir que esto funcione :-( – lemon

+0

sí mismo aquí que todavía muestra el elemento de inspeccionar – MXV

+0

que hay que tener cuidado de que nunca deja IRB intenta mostrar el constructor –

3

Si todavía quiere ver la salida:

xml = Builder::XmlMarkup.new; xml.target! 
Cuestiones relacionadas