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

319
Views
Cómo definir un método de clase: [] cuando se usa class_eval

Estoy usando la gema quaternion y quiero definir un método de clase para el operador :[] que crea un nuevo Quaternion a partir de una matriz. Yo he tratado

 Quaternion.class_eval do def self.[ary] Quaternion.new(*ary) end end

pero esto da un error de sintaxis. ¿Cómo hago esto?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El nombre del método es [] , pero todavía toma su lista de argumentos de la forma habitual

 def self.[](ary) ... end

Entonces lo llamas como Quaternion[ary]

over 4 years ago · Santiago Trujillo Report

0

En pocas palabras, para poder utilizar Quaternion[arg] , desea definirlo como se muestra a continuación.

 def self.[](arg) Quaternion.new(*ary) end

interesante es, ¿por qué funciona? Bueno, es azúcar sintáctico que tiene Ruby.

hacer foo[bar] es lo mismo que foo.[](bar)

foo[bar]=baz es lo mismo que foo.[]=(bar, baz)

y a + b es en realidad a.+(b)

Si quieres definirlo, se verá así:

 def [](key) ... end def []=(key, value) ... end def +(arg) ... end

Es porque los nombres de los métodos en Ruby pueden tener caracteres especiales.

Si está interesado en cómo se tokeniza y analiza internamente, puede leer Ruby Under Microscope, que es una excelente introducción al tema. También hay este libro gratuito que encontré que también toca el tema -> https://ruby-hacking-guide.github.io/ (consulte el capítulo 8, sección Llamadas a métodos)

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!