Tengo una clase personalizada y quiero poder anular el operador de asignación. Aquí se muestra un ejemplo:Método setter (asignación) con múltiples argumentos
class MyArray < Array
attr_accessor :direction
def initialize
@direction = :forward
end
end
class History
def initialize
@strategy = MyArray.new
end
def strategy=(strategy, direction = :forward)
@strategy << strategy
@strategy.direction = direction
end
end
este momento, no funciona según lo previsto. en el uso de
h = History.new
h.strategy = :mystrategy, :backward
[:mystrategy, :backward]
se asigna a la variable de la estrategia y la dirección de la variable permanece :forward
.
La parte importante es que quiero poder asignar un valor estándar al parámetro de dirección.
Cualquier pista para hacer este trabajo es muy apreciada.
Editado para agregar otra sugerencia para una implementación alternativa. – Phrogz
Me gusta la sugerencia donde se comprueba si el valor es una matriz. Usted dice que es un hack bruto. ¿Dónde usar esto causaría problemas? – FlyingFoX
@FlyingFoX Es un "hack bruto" en la medida en que no es idiomático, no es auto-documentado y no es generalmente aplicable (en el caso en que alguien quiera pasar una matriz como primer parámetro). – Phrogz