Estoy tratando de hacer un código con un gato, donde puedes comprar ciertos juguetes y usarlos. Sin embargo, cada vez que trato de enumerar los juguetes en la "tienda", me da un error cada vez. No estoy seguro de lo que estoy haciendo mal, pero definitivamente está en algún lugar de cómo estoy ejecutando el comando.
class Toy attr_reader :name def initialize(name) @name = name end def shop puts "#{@Toy}" end end toy.shopNo estoy seguro de cómo ejecutar correctamente este comando, pero estoy bastante seguro de que el problema está en la línea "toy.shop".
Hay una serie de problemas con su código actual. Dado que siempre hay más de una manera de hacer casi cualquier cosa en Ruby, también puede hacerlo de otras maneras. Sin embargo, aquí hay algunos problemas clave:
Según su ejemplo limitado, reescribiría y simplificaría el código de la siguiente manera:
class Toy attr_accessor :name def shop p "You bought a #{@name}." end end toy = Toy.new toy.name = "mouse" toy.shop #=> "You bought a mouse." Tenga en cuenta que Kernel#p no solo imprimirá su salida en STDOUT, sino que también devolverá un valor, que es extremadamente útil en un REPL o al depurar código. Kernel#puts , por otro lado, siempre devuelve nil , por lo que generalmente prefiero #p a menos que la salida de #inspect no sea deseable por alguna razón. Su millaje en ese sentido puede variar.
defined? palabra claveEn primer lugar, esta es una clase, debe inicializar y luego llamar al método de esta manera: Toy.new('some_toy').shop
Y hay un error en el método de su shop , @Toy no existe. Debería ser:
def shop puts "#{@name}" end