2011-04-29 2 views

Répondre

2

La réponse simple est non. Vous pouvez cependant jouer avec caller, il vous donne accès à la pile d'appels, un peu comme un backtrace d'exception:

def this_method_was_called_internally? 
    caller[1].include?(...) 
end 

(caller[1] serait l'appel précédent, à savoir la méthode d'appel this_method...)

Il est très hackish , et les informations que vous obtenez de caller peuvent ne pas suffire.

Veuillez ne pas l'utiliser autrement que pour expérimenter.

2

Si vous pouvez vous permettre une petite modification de votre code:

class MyParent 
    def self.foo(scope) 
    if scope == self 
     puts "yay" 
    else 
     puts "boo" 
    end 
    end 
end 

class MyLibrary < MyParent 
    foo(self) # yay 
end 

MyLibrary.foo(self) # boo 
Questions connexes