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

问题描述 投票:1回答:1

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

输出如下:

希望它打印的字符串也太零了

我想拥有的东西:

希望它也打印字符串,字符串上还有一些文本

function lua self
1个回答
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的形式。

© www.soinside.com 2019 - 2024. All rights reserved.