2016-10-04 3 views
0

J'ai cherché à partir d'Internet sur la façon d'écrire notre propre fonction de decider dans scons, quant à la façon/lorsqu'un fichier source doit être reconstruit, comme ceci:Est-ce que la fonction de décision personnalisée de scons doit être membre de la classe?

Program('hello.c') 
def decide_if_changed(dependency,target,prev_ni): 
if self.get_timestamp()!=prev_ni.timestamp: 
    dep=str(dependency) 
    tgt=str(target) 
    if specific_part_of_file_has_changed(dep,tgt): 
    return true; 
return false; 
Decider(decide_if_changed) 

J'ai un hello.c, aucun problème , mais lors de l'exécution scons il demande une erreur de python:

$ scons -Q 
scons: *** [o.o] NameError : global name 'self' is not defined 

auto est le mot-clé python mentionner une fonction de membre de la classe. Ici, dans le fichier SContruct, il y a une classe mais juste une fonction decide_if_changed. Question:

Do I have to add a class here? Why it prompts python error saying 'self' is not defined?

This example script a function call of specific_part_of_file_has_changed, is it a scons's own file that can be called by any pythong statement?

Répondre

1

Le nom self ne définit pas parce qu'il ya une faute de frappe dans la documentation. La deuxième ligne du decider devrait lire:

if dependency.get_timestamp()!=prev_ni.timestamp: 

la méthode mise en œuvre specific_part_of_file_has_changed() (ou une série similaire d'étapes pour déterminer si le fichier a été modifié) est complètement à vous ... le « client ». Après tout, vous voulez un "décideur personnalisé", non? ;)