Найти тему
Nikolay Lobkov

Callable в Godot

В Godot 4.0 был добавлен класс под названием Callable.

Callable может быть так ссылкой на функцию, так и отдельной функцией. Его можно хранить в переменной, а также передавать в качестве аргумента.

Описание из Godot docs:

Callable — это встроенный тип Variant , представляющий функцию. Это может быть либо метод внутри экземпляра Object , либо отдельная функция, не связанная ни с одним объектом, например, лямбда-функция. Как и все типы Variant , он может храниться в переменных и передаваться другим функциям. Чаще всего он используется для обратных вызовов сигналов.

Получение

Callable функции можно получить, имея объект, в котором имеется данная функция и имя самой функции. Для примера создадим функцию function(), и переменную function_callable, в которой будет храниться Callable созданной ранее функции.

Пример получения Callable метода "function".
Пример получения Callable метода "function".

Есть и другой способ получения Сallable. Для этого достаточно написать имя функции без скобочек и аргументов - это и будет Callable.

Второй пример получения Callable метода "function".
Второй пример получения Callable метода "function".

Callable в сигналах

Метод connect в сигналах как раз требует Callable для подключения сигнала к функции. Для примера создадим сигнал callable_test и в _ready() подключим его к нашей функции, а затем излучим сигнал.

Применение Callable в подключении сигналов.
Применение Callable в подключении сигналов.

В подключаемой функции должно быть то количество аргументов, что и у сигнала. Добавим к сигналу и к функции по одному аргументу и в _ready() излучим сигнал с аргументом.

-5

Вызов Callable

Чтобы вызвать функцию через Callable, используйте встроенный в Callable метод call().

Вызов функции через Callable.
Вызов функции через Callable.

Если в функции есть аргументы, то вписывайте их в call().

Вызов функции с аргументами.
Вызов функции с аргументами.

В Callable также есть метод callv(), который отличается от call() лишь тем, что он использует массив для записи аргументов.

call() и callv().
call() и callv().

Привязка аргументов к Callable

Вы можете заранее задать аргументы у Callable, для этого используйте метод bind(). Метод bind() возвращает копию Callable с привязанными аргументами. Задав аргументы заранее, можно вызывать копию этого Callable не вписывая аргументы.

Задаёт аргументы заранее, а потом вызывает, не вписывая их.
Задаёт аргументы заранее, а потом вызывает, не вписывая их.

Также есть метод bindv(), он отличается от bind() также как и callv() от call(), то есть использует массив для записи аргументов.

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц