Názor k článku Kolize spritů a naplánování operací v nástroji Pygame Zero od straka.milan - Poznámka: důležité upozornění – volat lze pouze funkce...

  • Článek je starý, nové názory již nelze přidávat.
  • 24. 11. 2020 8:09

    straka.milan
    Bronzový podporovatel


    Poznámka: důležité upozornění – volat lze pouze funkce bez parametrů a současně se nesmí jednat o uzávěry (což vyplývá z toho, že se jedná o funkce bez parametrů. Nelze ani použít funkce anonymní (lambda), pokud by se jednalo o uzávěr, což je poměrně velké omezení, které neumožňuje parametrizace.

    Tohle mě překvapilo, kromě serializace (kde třeba pickle serializuje jen top-level funkce odkazem na jméno) jsem měl pocit, že se používá koncept callable kde je to jen možné. Dokumentace https://pygame-zero.readthedocs.io/en/stable/builtins.html#clock o callbackup praví

    callback – A callable that takes no arguments.

    což zní rozumně; ale znamená to, že by měly fungovat jak closures (mimochodem closure nemusí mít parametry) tak lambda funkce.

    Aha, dokumentace také tvrdí

    Note that the Pygame Zero clock only holds weak references to each callback you give it. It will not fire scheduled events if the objects and methods are not referenced elsewhere. This can help prevent the clock keeping objects alive and continuing to fire unexpectedly after they are otherwise dead.

    The downside to the weak references is that you won’t be able to schedule lambdas or any other object that has been created purely to be scheduled. You will have to keep a reference to the object.

    což znamená, že closures a lambdy fungují, ale člověk si na ně musí sám udržovat referenci...