在此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()
输出如下:
希望它会打印出太零以外的字符串
我想拥有的东西
希望它也可以打印字符串
答案 0 :(得分:1)
对于您的功能,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
的形式)。>