Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

238
Views
Listado de partes de una clase

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.shop

No estoy seguro de cómo ejecutar correctamente este comando, pero estoy bastante seguro de que el problema está en la línea "toy.shop".

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Una reescritura y simplificación de trabajo

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:

  • Realmente no estás aprovechando #initialize.
  • No instancias un nuevo objeto Toy con Toy#new.
  • No asigna Toy#new a una variable de juguete local.
  • Debido a que toy no está definido, no tiene acceso a ninguno de los métodos de instancia de Toy como #shop.
  • La variable de juguete inexistente es el receptor del método #shop, por lo que generará NameError si el juguete no está definido, o NoMethodError si el juguete está definido pero no es una instancia de la clase Toy u otra clase que pueda responder al método #shop .

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."

¿Por qué Kernel#p en lugar de Kernel#puts?

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.

Ver también

  • El defined? palabra clave
  • Asignación de variables.
  • Sintaxis de rubí.
  • Excepciones de rubí.
over 4 years ago · Santiago Trujillo Report

0

En 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
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!