在此示例中如何正确使用self来打印字符串

时间:2019-12-30 20:56:18

标签: function lua self

在此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()

输出如下:

  

希望它会打印出太零以外的字符串

我想拥有的东西

  

希望它也可以打印字符串

1 个答案:

答案 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的形式)。