2
0
Эх сурвалжийг харах

Clarify restrictions on nested array types in Static typing in GDScript

Hugo Locurcio 9 сар өмнө
parent
commit
c86adb0bda

+ 9 - 6
tutorials/scripting/gdscript/static_typing.rst

@@ -198,14 +198,17 @@ To define the type of an ``Array``, enclose the type name in ``[]``.
 An array's type applies to ``for`` loop variables, as well as some operators like
 An array's type applies to ``for`` loop variables, as well as some operators like
 ``[]``, ``[]=``, and ``+``. Array methods (such as ``push_back``) and other operators
 ``[]``, ``[]=``, and ``+``. Array methods (such as ``push_back``) and other operators
 (such as ``==``) are still untyped. Built-in types, native and custom classes,
 (such as ``==``) are still untyped. Built-in types, native and custom classes,
-and enums may be used as element types. Nested array types are not supported.
+and enums may be used as element types. Nested array types
+(like ``Array[Array[int]]``) are not supported.
+
 
 
 ::
 ::
 
 
     var scores: Array[int] = [10, 20, 30]
     var scores: Array[int] = [10, 20, 30]
     var vehicles: Array[Node] = [$Car, $Plane]
     var vehicles: Array[Node] = [$Car, $Plane]
     var items: Array[Item] = [Item.new()]
     var items: Array[Item] = [Item.new()]
-    # var arrays: Array[Array] -- disallowed
+    var array_of_arrays: Array[Array] = [[], []]
+    # var arrays: Array[Array[int]] -- disallowed
 
 
     for score in scores:
     for score in scores:
         # score has type `int`
         # score has type `int`
@@ -407,10 +410,10 @@ that has a script attached with ``class_name MyScript`` and that ``extends
 Node2D``. If we have a reference to the object as a ``Node2D`` (for instance,
 Node2D``. If we have a reference to the object as a ``Node2D`` (for instance,
 as it was passed to us by the physics system), we can first check if the
 as it was passed to us by the physics system), we can first check if the
 property and method exist and then set and call them if they do::
 property and method exist and then set and call them if they do::
-    
+
     if "some_property" in node_2d:
     if "some_property" in node_2d:
         node_2d.some_property = 20  # Produces UNSAFE_PROPERTY_ACCESS warning.
         node_2d.some_property = 20  # Produces UNSAFE_PROPERTY_ACCESS warning.
-    
+
     if node_2d.has_method("some_function"):
     if node_2d.has_method("some_function"):
         node_2d.some_function()  # Produces UNSAFE_METHOD_ACCESS warning.
         node_2d.some_function()  # Produces UNSAFE_METHOD_ACCESS warning.
 
 
@@ -420,7 +423,7 @@ in the referenced type - in this case a ``Node2D``. To make these operations
 safe, you can first check if the object is of type ``MyScript`` using the
 safe, you can first check if the object is of type ``MyScript`` using the
 ``is`` keyword and then declare a variable with the type ``MyScript`` on
 ``is`` keyword and then declare a variable with the type ``MyScript`` on
 which you can set its properties and call its methods::
 which you can set its properties and call its methods::
-    
+
     if node_2d is MyScript:
     if node_2d is MyScript:
         var my_script: MyScript = node_2d
         var my_script: MyScript = node_2d
         my_script.some_property = 20
         my_script.some_property = 20
@@ -443,7 +446,7 @@ collision area to show the area's name. Once the object enters the collision
 area, the physics system sends a signal with a ``Node2D`` object, and the most
 area, the physics system sends a signal with a ``Node2D`` object, and the most
 straightforward (but not statically typed) solution to do what we want could
 straightforward (but not statically typed) solution to do what we want could
 be achieved like this::
 be achieved like this::
-    
+
     func _on_body_entered(body: Node2D) -> void:
     func _on_body_entered(body: Node2D) -> void:
         body.label.text = name  # Produces UNSAFE_PROPERTY_ACCESS warning.
         body.label.text = name  # Produces UNSAFE_PROPERTY_ACCESS warning.