Los upcase
, reverse
, next
y métodos swapcase
toda la vuelta String
objetos y todos esos métodos son para ... adivinaron, String
objetos!
Cuando llama a un método (la mayoría de las veces, como el 99.9999% del tiempo) devuelve un objeto. Este objeto tiene métodos definidos en él que a su vez se puede llamar lo que explica por qué se puede hacer esto:
"Test".upcase.reverse.next.swapcase
Incluso puede llamar reverse
tantas veces como se quiera:
"Test".reverse.reverse.reverse.reverse.reverse.reverse.reverse.reverse
Todo porque devuelve el mismo tipo de objeto, un objeto String
!
Pero no se puede hacer esto con su MyClass
:
x = My_Class.new
x.a.b.c
Para que funcione, el método a
tendría que devolver un objeto que tiene el método b
definido en ella. En este momento, parece que solo las instancias de MyClass
tendrían eso. Para conseguir que esto funcione usted podría hacer que el valor de retorno de a
el objeto en sí, así:
def a
@b += 2
self
end
Extrapolando esto, el método b
también tendría que volver self
como el método c
sólo está disponible en las instancias de la MyClass
clase. No importa qué devuelve c
en este ejemplo, porque es el final de la cadena. Podría devolver self
, no podría. Schrödinger's cat método. Nadie sabe hasta que abrimos la caja.
El siguiente enlace http://stackoverflow.com/questions/ 3955688/how-do-i-debug-ruby-scripts/3955730 # 3955730 puede ayudarte a resolver mejor lo que está pasando en Ruby. –
oh, ¿asumes que no ejecuto la depuración? ;) –
¿Has probado 'x.a' (sin' .b.c') antes de hacer la pregunta? –