在此MWE中,我试图在lua
中编写一个函数,该函数在被调用时会在调用该函数的字符串旁边打印一些文本。
为此,我使用self
打印字符串,但实际上返回了nil
值。在此示例中,如何正确使用self
以及如何归档此类任务?
str = "Some text on the string"
function string.add()
print("Hope it prints the string besides too",self)
end
str:add()
输出如下:
希望它打印的字符串也太零了
我想拥有的东西:
希望它也打印字符串,字符串上还有一些文本
对于您的功能,string.add(self)
等效于string:add()
。在后者的版本中,它是字符串类的成员函数或方法,self
是隐式的第一个参数。这类似于Python中的类,其中self
是每个成员函数的第一个参数。
-- Notice the self parameter.
function string.add(self)
print("Hope it prints the string besides too", self)
return
end
str = "Just some text on the string"
str:add()
作为旁注,如果您在调用str:add()
时通过C API公开Lua堆栈上的项目,则str
将是堆栈上的第一项,即索引1
处的元素]。将项目按传递给函数的顺序推入堆栈。
print("hello", "there,", "friend")
在此示例中,"hello"
是堆栈上的第一个参数,"there,"
是第二个参数,"friend"
是第三个参数。对于您的add
函数-写为str:add()
或string.add(str)
-self
(指str
)是Lua堆栈上的第一项。使用索引运算符定义成员函数(如string.add
的形式)具有灵活性,因为可以使用具有显式self
的形式和具有隐式self
的形式。