Demande de précisions callable/callback

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je regardais la documentation sur les Callback functions de LÖVE et je me suis demandé quelle était la différence entre les callable et les callbacks.

En regardant un peu le tutoriel de entwanne, j'avais appris qu'un callable est "un objet" qu'on peut appeler avec l'opérateur (), comme une fonction par exemple.

Normalement, si j'ai bien compris, un callback c'est une fonction que l'on passe en paramètre à une autre fonction, non ? Donc un callable (fonction) que l'on passe à un callable (fonction).

Alors, quand ils parlent de callback est-ce de l'abus de langage de leur part vu qu'aucunes fonctions ne sont passées à love.run() ? Ou c'est par extension qu'on considère qu'une fonction exécutée par une autre fonction est une callback ?

EDIT : en fait, il semblerait que ces callbacks soient passés à run bien qu'il n'y a pas de paramètre d'indiqué.

Merci d'avance pour vos précisions :)

Édité par Smokiev

Staff

Cette réponse a aidé l'auteur du sujet

Un callback, c'est généralement une fonction qu'on appelle pour réagir à un événement.

Quand je dis fonction c'est au sens large. En Python les fonctions sont théoriquement des objets qui implémentent une méthode __call__ ou bien une méthode rattachée à une instance (bound method). En Lua c'est un peu différent je crois qu'il n'y a vraiment que des fonctions, en C ce sont des pointeurs, en C++ ça peut être plein de trucs différents encore…

Bref l'appellation callback vient plus de la vocation du callable en question : réagir à un événement qui vient de se produire. Si je me souviens bien, dans Löve tu te contentes d'implémenter des hooks qui sont automatiquement appelés à chaque étape d'un pipeline de traitement bien défini (qui s'exécute pour chaque frame). En ce sens, tout ce que tu implémentes en codant les fonctions "spéciales" de Löve, ce sont justement des callbacks.

Édité par nohar

I was a llama before it was cool

+0 -0
Auteur du sujet

D'accord, merci pour ces éclaircissements !

Oui dans Löve tu implémentes des hooks qui sont appelées par love.run(), la pipeline de traitement bien défini dont tu parles.

Et du coup je me suis trompé dans mon edit du premier post puisque ces fonctions ne sont pas passées en paramètre à ce run(), c'est juste run() qui regarde à chaque fois si elles ont été définies avant de les appeler :

Ex : if love.update then love.update(dt) end

Édité par Smokiev

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte