class_callable.rst 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/4.0/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/4.0/doc/classes/Callable.xml.
  6. .. _class_Callable:
  7. Callable
  8. ========
  9. A built-in type representing a method or a standalone function.
  10. .. rst-class:: classref-introduction-group
  11. Description
  12. -----------
  13. **Callable** is a built-in :ref:`Variant<class_Variant>` type that represents a function. It can either be a method within an :ref:`Object<class_Object>` instance, or a standalone function not related to any object, like a lambda function. Like all :ref:`Variant<class_Variant>` types, it can be stored in variables and passed to other functions. It is most commonly used for signal callbacks.
  14. \ **Example:**\
  15. .. tabs::
  16. .. code-tab:: gdscript
  17. func print_args(arg1, arg2, arg3 = ""):
  18. prints(arg1, arg2, arg3)
  19. func test():
  20. var callable = Callable(self, "print_args")
  21. callable.call("hello", "world") # Prints "hello world ".
  22. callable.call(Vector2.UP, 42, callable) # Prints "(0, -1) 42 Node(node.gd)::print_args".
  23. callable.call("invalid") # Invalid call, should have at least 2 arguments.
  24. .. code-tab:: csharp
  25. // Default parameter values are not supported.
  26. public void PrintArgs(Variant arg1, Variant arg2, Variant arg3 = default)
  27. {
  28. GD.PrintS(arg1, arg2, arg3);
  29. }
  30. public void Test()
  31. {
  32. // Invalid calls fail silently.
  33. Callable callable = new Callable(this, MethodName.PrintArgs);
  34. callable.Call("hello", "world"); // Default parameter values are not supported, should have 3 arguments.
  35. callable.Call(Vector2.Up, 42, callable); // Prints "(0, -1) 42 Node(Node.cs)::PrintArgs".
  36. callable.Call("invalid"); // Invalid call, should have 3 arguments.
  37. }
  38. In GDScript, it's possible to create lambda functions within a method. Lambda functions are custom callables that are not associated with an :ref:`Object<class_Object>` instance. Optionally, lambda functions can also be named. The name will be displayed in the debugger, or when calling :ref:`get_method<class_Callable_method_get_method>`.
  39. ::
  40. func _init():
  41. var my_lambda = func (message):
  42. print(message)
  43. # Prints Hello everyone!
  44. my_lambda.call("Hello everyone!")
  45. # Prints "Attack!", when the button_pressed signal is emitted.
  46. button_pressed.connect(func(): print("Attack!"))
  47. .. rst-class:: classref-reftable-group
  48. Constructors
  49. ------------
  50. .. table::
  51. :widths: auto
  52. +---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
  53. | :ref:`Callable<class_Callable>` | :ref:`Callable<class_Callable_constructor_Callable>` **(** **)** |
  54. +---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
  55. | :ref:`Callable<class_Callable>` | :ref:`Callable<class_Callable_constructor_Callable>` **(** :ref:`Callable<class_Callable>` from **)** |
  56. +---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
  57. | :ref:`Callable<class_Callable>` | :ref:`Callable<class_Callable_constructor_Callable>` **(** :ref:`Object<class_Object>` object, :ref:`StringName<class_StringName>` method **)** |
  58. +---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
  59. .. rst-class:: classref-reftable-group
  60. Methods
  61. -------
  62. .. table::
  63. :widths: auto
  64. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  65. | :ref:`Callable<class_Callable>` | :ref:`bind<class_Callable_method_bind>` **(** ... **)** |vararg| |const| |
  66. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  67. | :ref:`Callable<class_Callable>` | :ref:`bindv<class_Callable_method_bindv>` **(** :ref:`Array<class_Array>` arguments **)** |
  68. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  69. | :ref:`Variant<class_Variant>` | :ref:`call<class_Callable_method_call>` **(** ... **)** |vararg| |const| |
  70. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  71. | void | :ref:`call_deferred<class_Callable_method_call_deferred>` **(** ... **)** |vararg| |const| |
  72. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  73. | :ref:`Variant<class_Variant>` | :ref:`callv<class_Callable_method_callv>` **(** :ref:`Array<class_Array>` arguments **)** |const| |
  74. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  75. | :ref:`Array<class_Array>` | :ref:`get_bound_arguments<class_Callable_method_get_bound_arguments>` **(** **)** |const| |
  76. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  77. | :ref:`int<class_int>` | :ref:`get_bound_arguments_count<class_Callable_method_get_bound_arguments_count>` **(** **)** |const| |
  78. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  79. | :ref:`StringName<class_StringName>` | :ref:`get_method<class_Callable_method_get_method>` **(** **)** |const| |
  80. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  81. | :ref:`Object<class_Object>` | :ref:`get_object<class_Callable_method_get_object>` **(** **)** |const| |
  82. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  83. | :ref:`int<class_int>` | :ref:`get_object_id<class_Callable_method_get_object_id>` **(** **)** |const| |
  84. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  85. | :ref:`int<class_int>` | :ref:`hash<class_Callable_method_hash>` **(** **)** |const| |
  86. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  87. | :ref:`bool<class_bool>` | :ref:`is_custom<class_Callable_method_is_custom>` **(** **)** |const| |
  88. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  89. | :ref:`bool<class_bool>` | :ref:`is_null<class_Callable_method_is_null>` **(** **)** |const| |
  90. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  91. | :ref:`bool<class_bool>` | :ref:`is_standard<class_Callable_method_is_standard>` **(** **)** |const| |
  92. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  93. | :ref:`bool<class_bool>` | :ref:`is_valid<class_Callable_method_is_valid>` **(** **)** |const| |
  94. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  95. | void | :ref:`rpc<class_Callable_method_rpc>` **(** ... **)** |vararg| |const| |
  96. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  97. | void | :ref:`rpc_id<class_Callable_method_rpc_id>` **(** :ref:`int<class_int>` peer_id, ... **)** |vararg| |const| |
  98. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  99. | :ref:`Callable<class_Callable>` | :ref:`unbind<class_Callable_method_unbind>` **(** :ref:`int<class_int>` argcount **)** |const| |
  100. +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
  101. .. rst-class:: classref-reftable-group
  102. Operators
  103. ---------
  104. .. table::
  105. :widths: auto
  106. +-------------------------+------------------------------------------------------------------------------------------------------------+
  107. | :ref:`bool<class_bool>` | :ref:`operator !=<class_Callable_operator_neq_Callable>` **(** :ref:`Callable<class_Callable>` right **)** |
  108. +-------------------------+------------------------------------------------------------------------------------------------------------+
  109. | :ref:`bool<class_bool>` | :ref:`operator ==<class_Callable_operator_eq_Callable>` **(** :ref:`Callable<class_Callable>` right **)** |
  110. +-------------------------+------------------------------------------------------------------------------------------------------------+
  111. .. rst-class:: classref-section-separator
  112. ----
  113. .. rst-class:: classref-descriptions-group
  114. Constructor Descriptions
  115. ------------------------
  116. .. _class_Callable_constructor_Callable:
  117. .. rst-class:: classref-constructor
  118. :ref:`Callable<class_Callable>` **Callable** **(** **)**
  119. Constructs an empty **Callable**, with no object nor method bound.
  120. .. rst-class:: classref-item-separator
  121. ----
  122. .. rst-class:: classref-constructor
  123. :ref:`Callable<class_Callable>` **Callable** **(** :ref:`Callable<class_Callable>` from **)**
  124. Constructs a **Callable** as a copy of the given **Callable**.
  125. .. rst-class:: classref-item-separator
  126. ----
  127. .. rst-class:: classref-constructor
  128. :ref:`Callable<class_Callable>` **Callable** **(** :ref:`Object<class_Object>` object, :ref:`StringName<class_StringName>` method **)**
  129. Creates a new **Callable** for the method named ``method`` in the specified ``object``.
  130. .. rst-class:: classref-section-separator
  131. ----
  132. .. rst-class:: classref-descriptions-group
  133. Method Descriptions
  134. -------------------
  135. .. _class_Callable_method_bind:
  136. .. rst-class:: classref-method
  137. :ref:`Callable<class_Callable>` **bind** **(** ... **)** |vararg| |const|
  138. Returns a copy of this **Callable** with one or more arguments bound. When called, the bound arguments are passed *after* the arguments supplied by :ref:`call<class_Callable_method_call>`. See also :ref:`unbind<class_Callable_method_unbind>`.
  139. \ **Note:** When this method is chained with other similar methods, the order in which the argument list is modified is read from right to left.
  140. .. rst-class:: classref-item-separator
  141. ----
  142. .. _class_Callable_method_bindv:
  143. .. rst-class:: classref-method
  144. :ref:`Callable<class_Callable>` **bindv** **(** :ref:`Array<class_Array>` arguments **)**
  145. Returns a copy of this **Callable** with one or more arguments bound, reading them from an array. When called, the bound arguments are passed *after* the arguments supplied by :ref:`call<class_Callable_method_call>`. See also :ref:`unbind<class_Callable_method_unbind>`.
  146. \ **Note:** When this method is chained with other similar methods, the order in which the argument list is modified is read from right to left.
  147. .. rst-class:: classref-item-separator
  148. ----
  149. .. _class_Callable_method_call:
  150. .. rst-class:: classref-method
  151. :ref:`Variant<class_Variant>` **call** **(** ... **)** |vararg| |const|
  152. Calls the method represented by this **Callable**. Arguments can be passed and should match the method's signature.
  153. .. rst-class:: classref-item-separator
  154. ----
  155. .. _class_Callable_method_call_deferred:
  156. .. rst-class:: classref-method
  157. void **call_deferred** **(** ... **)** |vararg| |const|
  158. Calls the method represented by this **Callable** in deferred mode, i.e. during the idle frame. Arguments can be passed and should match the method's signature.
  159. ::
  160. func _ready():
  161. grab_focus.call_deferred()
  162. .. rst-class:: classref-item-separator
  163. ----
  164. .. _class_Callable_method_callv:
  165. .. rst-class:: classref-method
  166. :ref:`Variant<class_Variant>` **callv** **(** :ref:`Array<class_Array>` arguments **)** |const|
  167. Calls the method represented by this **Callable**. Unlike :ref:`call<class_Callable_method_call>`, this method expects all arguments to be contained inside the ``arguments`` :ref:`Array<class_Array>`.
  168. .. rst-class:: classref-item-separator
  169. ----
  170. .. _class_Callable_method_get_bound_arguments:
  171. .. rst-class:: classref-method
  172. :ref:`Array<class_Array>` **get_bound_arguments** **(** **)** |const|
  173. Return the bound arguments (as long as :ref:`get_bound_arguments_count<class_Callable_method_get_bound_arguments_count>` is greater than zero), or empty (if :ref:`get_bound_arguments_count<class_Callable_method_get_bound_arguments_count>` is less than or equal to zero).
  174. .. rst-class:: classref-item-separator
  175. ----
  176. .. _class_Callable_method_get_bound_arguments_count:
  177. .. rst-class:: classref-method
  178. :ref:`int<class_int>` **get_bound_arguments_count** **(** **)** |const|
  179. Returns the total amount of arguments bound (or unbound) via successive :ref:`bind<class_Callable_method_bind>` or :ref:`unbind<class_Callable_method_unbind>` calls. If the amount of arguments unbound is greater than the ones bound, this function returns a value less than zero.
  180. .. rst-class:: classref-item-separator
  181. ----
  182. .. _class_Callable_method_get_method:
  183. .. rst-class:: classref-method
  184. :ref:`StringName<class_StringName>` **get_method** **(** **)** |const|
  185. Returns the name of the method represented by this **Callable**. If the callable is a lambda function, returns the function's name.
  186. .. rst-class:: classref-item-separator
  187. ----
  188. .. _class_Callable_method_get_object:
  189. .. rst-class:: classref-method
  190. :ref:`Object<class_Object>` **get_object** **(** **)** |const|
  191. Returns the object on which this **Callable** is called.
  192. .. rst-class:: classref-item-separator
  193. ----
  194. .. _class_Callable_method_get_object_id:
  195. .. rst-class:: classref-method
  196. :ref:`int<class_int>` **get_object_id** **(** **)** |const|
  197. Returns the ID of this **Callable**'s object (see :ref:`Object.get_instance_id<class_Object_method_get_instance_id>`).
  198. .. rst-class:: classref-item-separator
  199. ----
  200. .. _class_Callable_method_hash:
  201. .. rst-class:: classref-method
  202. :ref:`int<class_int>` **hash** **(** **)** |const|
  203. Returns the 32-bit hash value of this **Callable**'s object.
  204. \ **Note:** **Callable**\ s with equal content will always produce identical hash values. However, the reverse is not true. Returning identical hash values does *not* imply the callables are equal, because different callables can have identical hash values due to hash collisions. The engine uses a 32-bit hash algorithm for :ref:`hash<class_Callable_method_hash>`.
  205. .. rst-class:: classref-item-separator
  206. ----
  207. .. _class_Callable_method_is_custom:
  208. .. rst-class:: classref-method
  209. :ref:`bool<class_bool>` **is_custom** **(** **)** |const|
  210. Returns ``true`` if this **Callable** is a custom callable. Custom callables are created from :ref:`bind<class_Callable_method_bind>` or :ref:`unbind<class_Callable_method_unbind>`. In GDScript, lambda functions are also custom callables.
  211. .. rst-class:: classref-item-separator
  212. ----
  213. .. _class_Callable_method_is_null:
  214. .. rst-class:: classref-method
  215. :ref:`bool<class_bool>` **is_null** **(** **)** |const|
  216. Returns ``true`` if this **Callable** has no target to call the method on.
  217. .. rst-class:: classref-item-separator
  218. ----
  219. .. _class_Callable_method_is_standard:
  220. .. rst-class:: classref-method
  221. :ref:`bool<class_bool>` **is_standard** **(** **)** |const|
  222. Returns ``true`` if this **Callable** is a standard callable. This method is the opposite of :ref:`is_custom<class_Callable_method_is_custom>`. Returns ``false`` if this callable is a lambda function.
  223. .. rst-class:: classref-item-separator
  224. ----
  225. .. _class_Callable_method_is_valid:
  226. .. rst-class:: classref-method
  227. :ref:`bool<class_bool>` **is_valid** **(** **)** |const|
  228. Returns ``true`` if the callable's object exists and has a valid method name assigned, or is a custom callable.
  229. .. rst-class:: classref-item-separator
  230. ----
  231. .. _class_Callable_method_rpc:
  232. .. rst-class:: classref-method
  233. void **rpc** **(** ... **)** |vararg| |const|
  234. Perform an RPC (Remote Procedure Call). This is used for multiplayer and is normally not available, unless the function being called has been marked as *RPC*. Calling this method on unsupported functions will result in an error. See :ref:`Node.rpc<class_Node_method_rpc>`.
  235. .. rst-class:: classref-item-separator
  236. ----
  237. .. _class_Callable_method_rpc_id:
  238. .. rst-class:: classref-method
  239. void **rpc_id** **(** :ref:`int<class_int>` peer_id, ... **)** |vararg| |const|
  240. Perform an RPC (Remote Procedure Call) on a specific peer ID (see multiplayer documentation for reference). This is used for multiplayer and is normally not available unless the function being called has been marked as *RPC*. Calling this method on unsupported functions will result in an error. See :ref:`Node.rpc_id<class_Node_method_rpc_id>`.
  241. .. rst-class:: classref-item-separator
  242. ----
  243. .. _class_Callable_method_unbind:
  244. .. rst-class:: classref-method
  245. :ref:`Callable<class_Callable>` **unbind** **(** :ref:`int<class_int>` argcount **)** |const|
  246. Returns a copy of this **Callable** with a number of arguments unbound. In other words, when the new callable is called the last few arguments supplied by the user are ignored, according to ``argcount``. The remaining arguments are passed to the callable. This allows to use the original callable in a context that attempts to pass more arguments than this callable can handle, e.g. a signal with a fixed number of arguments. See also :ref:`bind<class_Callable_method_bind>`.
  247. \ **Note:** When this method is chained with other similar methods, the order in which the argument list is modified is read from right to left.
  248. ::
  249. func _ready():
  250. foo.unbind(1).call(1, 2) # Calls foo(1).
  251. foo.bind(3, 4).unbind(1).call(1, 2) # Calls foo(1, 3, 4), note that it does not change the arguments from bind.
  252. .. rst-class:: classref-section-separator
  253. ----
  254. .. rst-class:: classref-descriptions-group
  255. Operator Descriptions
  256. ---------------------
  257. .. _class_Callable_operator_neq_Callable:
  258. .. rst-class:: classref-operator
  259. :ref:`bool<class_bool>` **operator !=** **(** :ref:`Callable<class_Callable>` right **)**
  260. Returns ``true`` if both **Callable**\ s invoke different targets.
  261. .. rst-class:: classref-item-separator
  262. ----
  263. .. _class_Callable_operator_eq_Callable:
  264. .. rst-class:: classref-operator
  265. :ref:`bool<class_bool>` **operator ==** **(** :ref:`Callable<class_Callable>` right **)**
  266. Returns ``true`` if both **Callable**\ s invoke the same custom target.
  267. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  268. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  269. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  270. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  271. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  272. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`