GDScript语言使我对Godot Docs感到困惑。在页面的大约中间,在“引用函数”部分中,它说您不能将函数存储在变量中,然后似乎立即自相矛盾。
Godot函数是否可以存储在变量中?
引用功能
与Python相反,函数不是GDScript中的一流对象。这意味着它们不能存储在变量中,不能作为参数传递给另一个函数或从其他函数返回。这是出于性能原因。
要在运行时按名称引用函数(例如,将其存储在变量中或将其作为参数传递给另一个函数),必须使用call或funcref助手:
GDScript函数不是像python中那样的对象。因此,您不能直接引用函数。
但是,您可以使用它们的关联实例按名称间接引用它们。
例如,具有以下功能:
func hello():
print('Hello')
您可以按名称在实例上调用函数:
call('hello') # prints 'Hello'
您可以使用来存储实例和函数名称funcref()
:
var ref = funcref(hello_object_instance, 'hello')
ref.call_func() # prints 'Hello'
takes_func_ref_to_call_later(ref) # later, prints 'Hello'
FuncRef.call_func()
所做的事情与将Object.call()
其包装在一个对象中相同。
因此,如Object.connect()
和朋友所示,回调函数的常见模式是:
func deferred_finish(param1, param2, callback_obj, callback_func):
# ... do something
callback_ref = funcref(callback_obj, callback_func)
func _process(delta):
if _finished:
callback_ref.call_func()
func _enter_tree():
deferred_finish('hello', 'world', self, 'finished_callback')
我希望这有帮助。让我知道您是否需要任何澄清。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句