2010-12-27 17 views
0

Gibt es eine Möglichkeit in method_missing Erklärung in Ruby festzustellen, ob ein bestimmtes missing_method genannt wurde (ohne Argumente) Klammern Notation, das heißt:Unterschied zwischen method_missing in Ruby Aufruf mit und ohne Klammern

foo.non_existing_method() 

oder mit klammerlose Schreibweise:

foo.non_existing_method 

?

Ich brauche das, um mein sehr spezifisches Testproblem zu lösen.

Antwort

5

Nr

Da beide genau die gleichen, kann es nicht möglicherweise ein Weg, um den Unterschied zu erkennen.

Es macht sowieso keinen Sinn, da beide genau die gleichen sind, so dass es möglicherweise keinen möglichen Unterschied gibt.

Wenn Sie könnte den Unterschied erkennen, dann könnten Sie auch Ihre Methode haben anders zu verhalten, die äußerst überraschend jedem Benutzer dieser Methode wäre.

+0

Ich nehme an, dass es keine sehr überraschende Frage ist, wenn man bedenkt, dass "super" anders ist als "super()". – Phrogz

+0

@Phrogz: Das ist aber keine Nachricht senden. –

+0

örgWMittag Richtig, aber dass dies der Fall ist, ist für Endbenutzer nicht offensichtlich, genauso wie es nicht offensichtlich ist, dass "alias_method" eine Methode ist, aber 'alias' ist Syntax, oder dass' & 'als Methode implementiert werden kann, aber' && 'darf nicht. Mein einziger Punkt hier ist, dass es einen Fall in der Sprache gibt, in dem sich "xxx" anders verhält als "xxx()", so dass es für manche vielleicht nicht extrem überraschend ist, wenn sie ihr Verhalten auf der Grundlage der Aufrufmethode ändern. – Phrogz

Verwandte Themen