Lua - 使用和不使用"self"的相同结果
2017-10-25 22:54:13
收藏:0
阅读:117
评论:2
好的,接下来...
我一直在尝试使用通过将"self"作为参数来声明函数的各种示例。
我对此并不完全理解,这就是我试图全面理解的原因。我是一个彻底的初学者,但我有强烈的冲动去完全掌握它。
下面的两个示例返回相同的结果,尽管在示例2中,如果我没有在函数内声明"self = {}",我需要在函数参数中放置"self"(或":")才能使其工作。这就是"self"的全部吗?
在使用"self"时还有其他含义吗?
示例1
function Character.new(x)
self = {}
self.name = x
return self.name
end
a = Character
b = Character
hobbit = a.new ("Frodo")
dragon = b.new ("Smaug")
print (hobbit)
print (dragon)
示例2
Character = {}
function Character:new(x)
self.name = x
return self.name
end
a = Character
b = Character
hobbit = a:new ("Frodo")
dragon = b:new ("Smaug")
print (hobbit)
print (dragon)
;^) Zalokin
点赞
用户2674545
: 可以让你在函数中访问函数所在的表格,而无需显式地传递第一个参数。它可用于定义和调用函数。
下面的示例包含一个名为 t 的表格。该表格有 3 个函数(a,b 和 c)以及在键名为 greeting 下的一个字符串条目。
所有的函数/方法调用都会打印相同的字符串 "hello user"。
请注意,你仍然可以像调用普通函数一样调用方法(函数的容器表格作为第一个参数),但必须明确地将表格作为第一个参数传递。
self 参数可以随意命名,只要在函数内部使用正确的参数名就可以使用 : 调用函数(在本例中不是 self)。函数 c 就是一个例子。
它实际上就是语法糖。
local t = {}
t.greeting = "hello"
function t:a(name)
print(self.greeting, name)
end
function t.b(self, name)
print(self.greeting, name)
end
function t.c(myself, name)
print(myself.greeting, name)
end
t.a(t, "user")
t:a("user")
t.b(t, "user")
t:b("user")
t.c(t, "user")
t:c("user")
2017-10-26 21:49:46
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

你使用全局变量,而应该创建实例。
尝试使用以下代码,它们可能会帮助您理解:
-- 示例1 print(hobbit) print(self.name) print(dragon) print(self.name)和
- - 示例2 print(hobbit) print(Character.name) print(dragon) print(Character.name)