Lua 的 self 引用
2013-6-22 22:21:34
收藏:0
阅读:129
评论:4
如何在程序中使用 self 获取变量?
在 Java 中,你可以这样写:
private int a;
public void sa(int a) {
this.a = a;
}
public int ga() {
return this.a;
}
VB 中可以用 'ME',C# 中可以用 'this' 等等。
那么在 Lua 中该怎么做?以下方法是否正确呢?
local a
function sa(self, a)
self.a = a
end
点赞
用户1190388
这与您说的有点相似,但 OOP 方法略有不同。以下是实际方法。
local t = {
a
}
t.__index = t
function t:sa(x)
self.a = x
end
然后,要调用函数:
t:sa(21)
或者
t.sa( t, "这次是一些字符串?" )
2013-06-22 22:50:01
用户1130744
在Lua中,没有专门的类实现,但是可以使用表来模拟它。
为了简化事情,Lua提供了一些"语法糖":
声明类成员时,可以使用以下完全等效的语法:
function table.member(self,p1,p2)
end
或者
function table:member(p1,p2)
end
或者
table.member = function(self,p1,p2)
end
现在,来到了棘手的部分:
调用
table:member(1,2)
你会得到:
self=table,p1=1,p2=2
调用
table.member(1,2)
你会得到:
self=1,p1=2,p2=nil
换句话说,: 模拟了一个真实的类,而.更像一个静态使用。好处是可以混合这两种样式,例如:
table.member(othertable,1,2)
结果是:
self=othertable,p1=1,p2=2
这样你就可以从其他类中"借用"方法来实现多重继承。
2013-06-23 18:00:03
用户2162852
请记住, a:b(...) 和 function a:b(...) ... end 只是一种语法糖。self 不一定指向“当前对象”,因为与其他编程语言不同,self 只是一个变量,可以分配给任何东西。请参考下面的示例进行演示:
function table:member(p1, p2)
print(self, p1, p2)
end
只是
table.member = function(self, p1, p2)
print(self, p1, p2)
end
而且
table:member(1, 2)
只是
table.member(table, 1, 2)
因此
function table:member(self, p1, p2)
print(self, p1, p2)
end
table:member(1,2) --self=1 p1=2 p2=nil
因为这只是
table.member = function(self, self, p1, p2)
print(self, p1, p2)
end
table.member(table, 1, 2) --self=1 p1=2 p2=nil
2019-04-08 19:37:11
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
显然,这正是我所说的。
local a function sa(a) self.a = a end