Snippet 1:Quelle est la différence entre ces deux extraits de Ruby?
module A
def cm(m,ret)
class_eval do
define_method(m.to_sym) do
return ret
end
end
end
end
et de fragment 2:
module B
def cm(m,ret)
class_eval do
"def #{m} #{ret} end"
end
end
end
Les méthodes définies dans ces modules doivent être utilisés pour créer des méthodes d'une classe, qui renvoie certaines valeurs. Voici un exemple:
class Whatever
extend A
cm("two",2)
end
et cela va créer une méthode nommée 2, qui sera de retour 2. La chose est, le code dans le deuxième extrait ne fonctionne pas. Des idées pourquoi? Je pensais que class_eval
pourrait prendre une chaîne.
Je pense toujours que la définition elle-même semble erroné. ne serait-ce pas: "def # {m}; return # {ret}; fin" – Jean
@Jean: Le mot-clé return est facultatif quand l'expression est la dernière de la méthode quand même. Il y a donc un terminateur avant le mot-clé end ou après la liste des arguments d'une définition de méthode. C'est à dire. 'def five() 5 end' est une syntaxe valide. Cependant 'def five 5 end' n'est pas. – sepp2k