strong rails permit new ruby methods setter indexer

permit - routes in ruby on rails



Creando un método setter que toma argumentos extra en Ruby (2)

Estoy tratando de escribir un método que actúe como definidor y tome algunos argumentos adicionales además del valor asignado. Ejemplo tonto:

class WordGenerator def []=(letter, position, allowed) puts "#{letter}#{allowed ? '' now'' : '' no longer''} allowed at #{position}" end def allow=(letter, position, allowed) # ... end end

Escribirlo como un indexador funciona y puedo llamarlo así:

gen = WordGenerator.new gen[''a'', 1] = true # or explicitly: gen.[]=(''a'', 1, true)

Pero cuando intento alguno de los siguientes, el intérprete se queja:

gen.allow(''a'', 1) = false # syntax error gen.allow=(''a'', 1, false) # syntax error

¿Por qué no funciona esto, me estoy perdiendo lo obvio?


Me he encontrado con esto y decidí pasar mis argumentos como una matriz o hash.

P.ej:

def allow=(arguments) puts arguments[:letter] puts arguments[:position] puts arguments[:allowed] end object.allow={:letter=>''A'',:position=>3,:allowed=>true}


No funciona porque el analizador no lo permite. Se permite un signo igual en las expresiones del identifier = expression forma identifier = expression , expression.identifier = expression (donde el identificador es /w+ ), expression[arguments] = expression y expression.[]= arguments y como parte de una cadena, símbolo o carácter literal ( ?= ). Eso es.

gen.send(:allow=, ''a'', 1, false) funcionaría, pero en ese punto también podrías darle al método un nombre que no incluya a = .