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 с C#. Подробнее см. API различия C# и GDScript.

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

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 в указанном variation. Для представления метода встроенного типа Variant используется пользовательский вызываемый объект (см. is_custom()). Если variation — это Object, то вместо него будет создан стандартный вызываемый объект.

Примечание: Этот метод всегда необходим для типа Dictionary, так как для доступа к его записям используется синтаксис свойств. Вы также можете использовать этот метод, когда тип variation заранее неизвестен (для полиморфизма).


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, возвращает имя функции или "<anonymous lambda>".


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 вызывают одну и ту же пользовательскую цель.