我对GDScript language的部分Godot文档感到困惑。它似乎自相矛盾。在页面的大约中间位置,在“引用函数”部分,它说您不能将函数存储在变量中,然后似乎立即自相矛盾。
Godot函数是否可以存储在变量中?
引用功能
与Python相反,函数不是GDScript中的一流对象。 这意味着 它们不能存储在变量中 ,不能作为参数传递给另一个函数或从其他函数返回。这是出于性能原因。
要在运行时按名称引用函数(例如, 例如将其存储在变量中 或将其作为参数传递给另一个函数),一个人必须使用调用或funcref助手:
答案 0 :(得分:1)
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_instance.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')
我希望这会有所帮助。让我知道您是否需要任何澄清。