📅  最后修改于: 2021-01-02 10:08:00             🧑  作者: Mango
它们不能存储在变量中,不能作为参数传递给另一个服务,也不能从其他函数返回。这是出于性能原因。
要在运行时通过函数名称引用函数(例如,将其存储在变量中,或将其作为参数传递给另一个函数),必须使用调用或funcref帮助器:
# Call a function by its name in one step.
my_node.call("my_function", args)
# Store a function reference.
var my_func = funcref(my_node, "my_function")
# Call stored function reference.
my_func.call_func(args)
请记住,默认函数(如_init )和大多数通知(如_enter_tree , _exit_tree , _process , _physics_process等)都将在所有基类中自动调用。因此,以某种方式重载它们时,仅需要显式调用该函数。
静态功能
函数始终声明为静态。如果函数是静态的,则可以访问实例成员变量或self 。这用于制作辅助函数库。
static func sum2(a, b):
return a + b
它们是标准的,可以是赋值,函数调用,控制流结构等(请参见下文) ;作为声明,分隔符完全是可选的。
通过使用if / else / elif语法创建简单条件。允许在条件周围加上括号,但不是必需的。给定基于选项卡的缩进的性质,可以使用elif代替else / if来保持一定程度的缩进。
if [expression]:
statement(s)
elif [expression]:
statement(s)
else:
statement(s)
短语句可以与条件写在同一行:
If 1 + 1==2: return 2+2
else:
var x=3+3
return x
有时我们可能想基于布尔表达式分配一个不同的首字母。在这种情况下,三元if表达式会派上用场:
var x=[value] if[expression] else [value]
y+=3 if y<10 else -1
而
通过使用while语法创建循环。循环可以使用break中断,或使用continue继续:
而[表情]:
声明
对于
为了遍历数组或表之类的范围,使用了for循环。当遍历数组时,数组元素h存储在循环变量中。迭代字典时,具有b的索引存储在循环变量中。
for x in [5, 7, 11]:
statement # Loop iterates three times with 'x' as 5, then seven and finally 11.
var dict = {"a": 0, "b": 1, "c": 2}
for i in dict:
print(dict[i])
for i in range(3):
statement # Similar to the array [0, 1, 2] but does not allocate an array.
for i in range(1,3):
statement # Similar to [1, 2] but cannot allocate an array.
for i in range(2,8,2):
statement # Similar to [2, 4, 6] but not allocate an array.
for c in "Hello":
print(c) # Iterate by all characters in an eString, print every letter on the new line.
比赛
match语句用于分支程序的执行。它等效于许多其他语言中的switch语句,但提供了一些附加功能。
句法:
match [expression]:
[pattern](s):
[block]
[pattern](s):
[block]
[pattern](s):
[block]
切换语句:
控制流:
模式从上到下匹配。如果模式匹配,则执行在match语句下继续。
如果我们希望通过,可以使用continue停止当前块中的执行,并检查其下的执行。
有六种模式类型:
match x:
1:
print("We are number one!)
2:
print("Two are better than one!")
"test":
print("Oh snap! It's a string!")
match typeof(x):
TYPE_FLOAT:
print("float")
TYPE_STRING:
print("text")
TYPE_ARRAY:
print("array")
match x:
1:
print("It's one!")
2:
print("It's one time two!")
_:
print ("It's not 1 or 2. I don't care tbh.")
match x:
1:
print("It's one!")
2:
print("It's one times two!")
var new_var:
print("It is not 1 or 2, it is ", new_var)
match x:
[]:
print("Empty array")
[1, 3, "test", null]:
print("Very specific array")
[var start, _, "test"]:
print("First element is ", start, ", and the last is \"test\"")
[42, ..]:
print("Open ended array")
match x:
{}:
print("Empty dict")
{"name": "Dennis"}:
print("The name is Dennis")
{"name": "Dennis", "age": var age}:
print("Dennis is ", age, " years old.")
{"name", "age"}:
print("Has a name and an age, but it is not Dennis :(")
{"key": "godotisawesome", ..}:
print("I checked for one entry and ignored the rest")
我们还可以指定多个模式,以逗号分隔。这些模式不允许在其中包含任何绑定。
match x:
1, 2, 3:
print("It's 1 - 3")
"Sword", "Splash potion", "Fist":
print("Yep, you've taken damage")