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.
Checking the stable version of the documentation...
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.
// Default parameter values are not supported.
public void PrintArgs(Variant arg1, Variant arg2, Variant arg3 = default)
{
GD.PrintS(arg1, arg2, arg3);
}
public void Test()
{
// Invalid calls fail silently.
Callable callable = new Callable(this, MethodName.PrintArgs);
callable.Call("hello", "world"); // Default parameter values are not supported, should have 3 arguments.
callable.Call(Vector2.Up, 42, callable); // Prints "(0, -1) 42 Node(Node.cs)::PrintArgs"
callable.Call("invalid"); // Invalid call, should have 3 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(object: Object, method: StringName) |
Методи
bind(...) vararg const |
|
Variant |
call(...) vararg const |
void |
call_deferred(...) vararg const |
Variant |
|
create(variant: Variant, method: StringName) static |
|
get_argument_count() const |
|
get_bound_arguments() const |
|
get_bound_arguments_count() const |
|
StringName |
get_method() const |
Object |
get_object() const |
get_object_id() const |
|
get_unbound_arguments_count() const |
|
hash() const |
|
is_custom() const |
|
is_null() const |
|
is_standard() const |
|
is_valid() const |
|
void |
rpc(...) vararg const |
void |
|
Оператори
operator !=(right: Callable) |
|
operator ==(right: 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()
public override void _Ready()
{
Callable.From(GrabFocus).CallDeferred();
}
**Примітка: ** Відкладені дзвінки обробляються під час простою. Час простою відбувається в основному в кінці кадрів процесу та фізики. У ньому відкладені виклики виконуватимуться, доки їх не залишиться, що означає, що ви можете відкласти виклики з інших відкладених викликів, і вони все одно виконуватимуться в поточному циклі простою. Це означає, що ви не повинні викликати метод, відкладений від самого себе (або від викликаного ним методу), оскільки це спричиняє нескінченну рекурсію так само, як якщо б ви викликали метод безпосередньо.
Дивіться також 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.
Повертає ідентифікатор цього об'єкта Callable (див. Object.get_instance_id()).
int get_unbound_arguments_count() const 🔗
Повертає загальну кількість аргументів, не зв’язаних через послідовні виклики bind() або unbind(). Дивіться get_bound_arguments() для деталей.
Примітка: Методи get_bound_arguments_count() і get_unbound_arguments_count() можуть повертати позитивні значення.
Повертає 32-бітне хеш-значення цього об’єкта Callable.
Примітка: Callable з однаковим вмістом завжди створюватимуть ідентичні хеш-значення. Однак зворотне не вірно. Повернення ідентичних хеш-значень не означає, що виклики є рівними, оскільки різні викликані можуть мати ідентичні хеш-значення через колізії ішов. Механізм використовує 32-розрядний алгоритм хешування для hash().
Повертає true, якщо цей Callable є спеціальним викликом. Використовуються спеціальні виклики:
Повертає true, якщо цей Callable не має цілі для виклику методу. Еквівалент callable == Callable().
Примітка: Це не те саме, що not is_valid(), і використання not is_null() не гарантує, що цей виклик можна буде викликати. Натомість використовуйте is_valid().
Повертає true, якщо цей Callable є стандартним викликом. Цей метод протилежний is_custom(). Повертає false, якщо цей виклик є лямбда-функцією.
Повертає 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 занурюють ті ж індивідуальні цілі.