2017-04-19 1 views
0

Puis-je/comment appeler l'opérateur ternaire en utilisant la construction syntaxique send :name, *args, &blk? Je n'ai pas de raison pratique de le faire, mais c'est arrivé.Invoquer `?:` Using `send` dans Ruby

Ici vous pouvez voir mes tentatives lamentables:

i = 7 

send "?:", proc { i > 2 }, true, false 
# => NoMethodError: undefined method `?:' for main:Object 

proc { i > 2 }.send "?:", true, false 
# => NoMethodError: undefined method `?:' for #<Proc:[email protected](irb):3> 

proc { i > 2 }.call.send "?:", true, false 
# => NoMethodError: undefined method `?:' for true:TrueClass 
+0

'? : 'ne" lie "pas à un objet, donc' send' est moins susceptible de fonctionner avec lui. D'autres syntaxes similaires sont 'if/while/begin' etc. Dans le cas où cela est nécessaire en pratique, nous pourrions utiliser un objet proxy. – Jokester

+1

Bonjour avez-vous considéré eval/instance_eval? – Bohdan

+0

@Bohdan oui je suppose que c'est la meilleure solution. –

Répondre

1

Il n'y a aucun moyen de le faire. La construction de l'opérateur ternaire, ou la partie ?, n'est pas une méthode; Comme vous l'avez remarqué, c'est une construction syntaxique. Pendant ce temps, send ne peut gérer que des méthodes.