Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Callable

Вбудований тип, що представляє метод або окрему функцію.

Опис

Callable is a built-in Variant type that represents a function. It can either be a method within an Object instance, or a custom callable used for different purposes (see is_custom()). Like all Variant types, it can be stored in variables and passed to other functions. It is most commonly used for signal callbacks.

func print_args(arg1, arg2, arg3 = ""):
    prints(arg1, arg2, arg3)

func test():
    var callable = Callable(self, "print_args")
    callable.call("hello", "world")  # Prints "hello world ".
    callable.call(Vector2.UP, 42, callable)  # Prints "(0.0, -1.0) 42 Node(node.gd)::print_args"
    callable.call("invalid")  # Invalid call, should have at least 2 arguments.

In GDScript, it's possible to create lambda functions within a method. Lambda functions are custom callables that are not associated with an Object instance. Optionally, lambda functions can also be named. The name will be displayed in the debugger, or when calling get_method().

func _init():
    var my_lambda = func (message):
        print(message)

    # Prints "Hello everyone!"
    my_lambda.call("Hello everyone!")

    # Prints "Attack!", when the button_pressed signal is emitted.
    button_pressed.connect(func(): print("Attack!"))

In GDScript, you can access methods and global functions as Callables:

tween.tween_callback(node.queue_free)  # Object methods.
tween.tween_callback(array.clear)  # Methods of built-in types.
tween.tween_callback(print.bind("Test"))  # Global functions.

Note: Dictionary does not support the above due to ambiguity with keys.

var dictionary = { "hello": "world" }

# This will not work, `clear` is treated as a key.
tween.tween_callback(dictionary.clear)

# This will work.
tween.tween_callback(Callable.create(dictionary, "clear"))

Note: In a boolean context, a callable will evaluate to false if it's null (see is_null()). Otherwise, a callable will always evaluate to true.

Примітка

Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.

Конструктори

Callable

Callable()

Callable

Callable(from: Callable)

Callable

Callable(object: Object, method: StringName)

Методи

Callable

bind(...) vararg const

Callable

bindv(arguments: Array)

Variant

call(...) vararg const

void

call_deferred(...) vararg const

Variant

callv(arguments: Array) const

Callable

create(variant: Variant, method: StringName) static

int

get_argument_count() const

Array

get_bound_arguments() const

int

get_bound_arguments_count() const

StringName

get_method() const

Object

get_object() const

int

get_object_id() const

int

get_unbound_arguments_count() const

int

hash() const

bool

is_custom() const

bool

is_null() const

bool

is_standard() const

bool

is_valid() const

void

rpc(...) vararg const

void

rpc_id(peer_id: int, ...) vararg const

Callable

unbind(argcount: int) const

Оператори

bool

operator !=(right: Callable)

bool

operator ==(right: Callable)


Описи конструкторів

Callable Callable() 🔗

Створює порожній Callable без прив’язки до об’єкта чи методу.


Callable Callable(from: Callable)

Створює Callable як копію заданого Callable.


Callable Callable(object: Object, method: StringName)

Створює новий Callable для методу з назвою method у вказаному object.

Примітка: Для методів вбудованих типів Variant замість цього використовуйте create().


Описи методів

Callable bind(...) vararg const 🔗

Повертає копію цього Callable з одним або кількома зв’язаними аргументами. Під час виклику зв’язані аргументи передаються після аргументів, наданих call(). Дивіться також unbind().

Примітка: Коли цей метод пов’язано з іншими подібними методами, порядок, у якому змінюється список аргументів, читається справа наліво.


Callable bindv(arguments: Array) 🔗

Повертає копію цього Callable з одним або кількома зв’язаними аргументами, зчитуючи їх із масиву. Під час виклику зв’язані аргументи передаються після аргументів, наданих call(). Дивіться також unbind().

Примітка: Коли цей метод пов’язано з іншими подібними методами, порядок, у якому змінюється список аргументів, читається справа наліво.


Variant call(...) vararg const 🔗

Викликає метод, представлений цим Callable. Аргументи можуть бути передані та повинні відповідати сигнатурі методу.


void call_deferred(...) vararg const 🔗

Викликає метод, представлений цим Callable у відкладеному режимі, тобто в кінці поточного кадру. Аргументи можуть бути передані та повинні відповідати сигнатурі методу.

func _ready():
     grab_focus.call_deferred()

**Примітка: ** Відкладені дзвінки обробляються під час простою. Час простою відбувається в основному в кінці кадрів процесу та фізики. У ньому відкладені виклики виконуватимуться, доки їх не залишиться, що означає, що ви можете відкласти виклики з інших відкладених викликів, і вони все одно виконуватимуться в поточному циклі простою. Це означає, що ви не повинні викликати метод, відкладений від самого себе (або від викликаного ним методу), оскільки це спричиняє нескінченну рекурсію так само, як якщо б ви викликали метод безпосередньо.

Дивіться також Object.call_deferred().


Variant callv(arguments: Array) const 🔗

Викликає метод, представлений цим Callable. На відміну від call(), цей метод очікує, що всі аргументи будуть міститися всередині arguments Array.


Callable create(variant: Variant, method: StringName) static 🔗

Створює новий Callable для методу з назвою method у вказаному variant. Для представлення методу вбудованого типу Variant використовується настроюваний виклик (див. is_custom()). Якщо variant дорівнює Object, замість цього буде створено стандартний виклик.

**Примітка: ** Цей метод завжди необхідний для типу Dictionary, оскільки для доступу до його записів використовується синтаксис властивості. Ви також можете використовувати цей метод, коли тип variant невідомий заздалегідь (для поліморфізму).


int get_argument_count() const 🔗

Повертає загальну кількість аргументів, які цей Callable має прийняти, включаючи необов’язкові аргументи. Це означає, що будь-які аргументи, пов’язані з bind(), віднімаються з результату, а будь-які аргументи, не пов’язані з unbind(), додаються до результату.


Array get_bound_arguments() const 🔗

Повертає масив аргументів, пов’язаних через послідовні виклики bind() або unbind(). Ці аргументи буде додано після аргументів, переданих до виклику, з якого get_unbound_arguments_count() аргументи праворуч були раніше виключені.

func get_effective_arguments(callable, call_args):
     assert(call_args.size() - callable.get_unbound_arguments_count() >= 0)
     var result = call_args.slice(0, call_args.size() - callable.get_unbound_arguments_count())
     result.append_array(callable.get_bound_arguments())
     return result

int get_bound_arguments_count() const 🔗

Повертає загальну кількість аргументів, зв’язаних послідовними викликами bind() або unbind(). Це те саме, що розмір масиву, який повертає get_bound_arguments(). Дивіться get_bound_arguments() для деталей.

Примітка. Методи get_bound_arguments_count() і get_unbound_arguments_count() можуть повертати позитивні значення.


StringName get_method() const 🔗

Повертає назву методу, представленого цим Callable. Якщо викликається лямбда-функція GDScript, повертає назву функції або "<анонімний лямбда>".


Object get_object() const 🔗

Повертає об’єкт, для якого викликається Callable.


int get_object_id() const 🔗

Повертає ідентифікатор цього об'єкта Callable (див. Object.get_instance_id()).


int get_unbound_arguments_count() const 🔗

Повертає загальну кількість аргументів, не зв’язаних через послідовні виклики bind() або unbind(). Дивіться get_bound_arguments() для деталей.

Примітка: Методи get_bound_arguments_count() і get_unbound_arguments_count() можуть повертати позитивні значення.


int hash() const 🔗

Повертає 32-бітне хеш-значення цього об’єкта Callable.

Примітка: Callable з однаковим вмістом завжди створюватимуть ідентичні хеш-значення. Однак зворотне не вірно. Повернення ідентичних хеш-значень не означає, що виклики є рівними, оскільки різні викликані можуть мати ідентичні хеш-значення через колізії ішов. Механізм використовує 32-розрядний алгоритм хешування для hash().


bool is_custom() const 🔗

Повертає true, якщо цей Callable є спеціальним викликом. Використовуються спеціальні виклики:

  • для зв'язування/розв'язування аргументів (див. bind() і unbind());

  • для представлення методів вбудованих типів Variant (див. create());

  • для представлення глобальних, лямбда-функцій і RPC-функцій у GDScript;

  • для інших цілей у ядрі, GDExtension і C#.


bool is_null() const 🔗

Повертає true, якщо цей Callable не має цілі для виклику методу. Еквівалент callable == Callable().

Примітка: Це не те саме, що not is_valid(), і використання not is_null() не гарантує, що цей виклик можна буде викликати. Натомість використовуйте is_valid().


bool is_standard() const 🔗

Повертає true, якщо цей Callable є стандартним викликом. Цей метод протилежний is_custom(). Повертає false, якщо цей виклик є лямбда-функцією.


bool is_valid() const 🔗

Повертає true, якщо об’єкт, що викликається, існує та має дійсне ім’я методу, або є власним викликом.


void rpc(...) vararg const 🔗

Виконайте RPC (віддалений виклик процедури) на всіх підключених вузлах. Це використовується для багатокористувацьких ігор і зазвичай недоступне, якщо функція, що викликається, не була позначена як RPC (за допомогою @GDScript.@rpc() або Node.rpc_config()). Виклик цього методу для непідтримуваних функцій призведе до помилки. Див. Node.rpc().


void rpc_id(peer_id: int, ...) vararg const 🔗

Виконайте RPC (віддалений виклик процедури) для певного ідентифікатора однорангового пристрою (довідково дивіться документацію щодо багатокористувацької гри). Це використовується для багатокористувацької гри та зазвичай недоступне, якщо функція, що викликається, не була позначена як RPC (за допомогою @GDScript.@rpc або Node.rpc_config()). Виклик цього методу для непідтримуваних функцій призведе до помилки. Див. Node.rpc_id().


Callable unbind(argcount: int) const 🔗

Повертає копію цього Callable з низкою аргументів без зв’язку. Іншими словами, коли викликається новий виклик, кілька останніх аргументів, наданих користувачем, ігноруються відповідно до argcount. Решта аргументів передаються викликаному. Це дозволяє використовувати оригінальний виклик у контексті, який намагається передати більше аргументів, ніж цей виклик може обробити, наприклад. сигнал із фіксованою кількістю аргументів. Дивіться також bind().

Примітка: Коли цей метод пов’язано з іншими подібними методами, порядок, у якому змінюється список аргументів, читається справа наліво.

func _ready():
     foo.unbind(1).call(1, 2) # Виклики foo(1).
     foo.bind(3, 4).unbind(1).call(1, 2) # Викликає foo(1, 3, 4), зауважте, що це не змінює аргументи bind.

Описи операторів

bool operator !=(right: Callable) 🔗

Повертає true, якщо обидві Callable занурюють різні цілі.


bool operator ==(right: Callable) 🔗

Повертаємо true, якщо обидві Callable занурюють ті ж індивідуальні цілі.