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

236
Views
¿Cómo almacenar una subrutina en una variable en Ruby?

Estoy tratando de probar que puede almacenar subrutinas dentro de una variable (a menos que no pueda). ¿Hay alguna posibilidad de que tenga este código mal?

Tengo este código de Python que hace lo que quiero hacer.

 def printSample(str) puts str end x = printSample str = "Hello" x(str)

Rendimiento esperado:

Hola

Soy un principiante en Ruby y solo trato de aprender códigos básicos.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Su código de Python se puede traducir a Ruby como:

 def print_sample(str) puts str end x = method(:print_sample) str = "Hello" x.(str)

La principal diferencia es que debido a que los paréntesis en Ruby son opcionales, escribir x = print_sample ya invocaría el método. Recuperar un objeto Método al que puede llamar más tarde es un poco más complicado: tiene que llamar almethod y pasar el nombre del método como un símbolo o una cadena. (el receptor es el objeto en el que se define el método)

Y debido a que los objetos de método son objetos regulares, la sintaxis para llamar al método también es ligeramente diferente. Rubí proporciona:

 x[str] x.(str) x.call(str)

Siendo x.(str) azúcar sintáctico para x.call(str) , consulte Method#call


Otro enfoque es simplemente almacenar el nombre del método e invocar el método dinámicamente a través de send / public_send , por ejemplo:

 x = :print_sample str = "Hello" send(x, str)

Hacer referencia a los métodos a través de su nombre (simbolizado) es bastante idiomático en Ruby.

over 4 years ago · Santiago Trujillo Report

0

Ejemplo para manejar un método de instancia:

 class Demo def initialize(s); @s = s; end def printSample(str); puts(@s+str); end end x = Demo.instance_method(:printSample) # x is now of class UnboundMethod aDemo = Demo.new("Hi") # Use x x.bind(aDemo).call("You") # Outputs: HiYou

En este ejemplo, primero almacenamos el método y luego lo aplicamos a una instancia. Si tiene la instancia primero y desea obtener el método más tarde, es aún más simple. Asumiendo la definición de clase de Demo de arriba, igualmente puede hacer una

 aDemo = Demo.new("Hi") y = aDemo.method(:printSample) y.call("You")
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!