如果Lua没有课程,为什么它有一个点运算符?
EG。在string.find
中,string
是一个具有静态/类方法find
的类吗?
答案 0 :(得分:5)
在您的示例中,find
是表格中的条目 string
string["find"]
可以这样定义:
local string = {
"find" = function()
-- find stuff
end
}
或
local string = {}
string["find"] = function()
-- find stuff
end
或
local string = {}
string.find = function()
-- find stuff
end
答案 1 :(得分:-1)
使用Lua 5.3-字符串是可中继的。因此,如果知道与哪些功能相关联,则可以直接使用它,也可以尝试使用metatable中定义的功能。 而“处于可变位状态”意味着获得点...
str='Doomsday starts with: Tah tah tah Taaaahhh'
print(#str)
print(getmetatable(str).__index.len(str))
这两个函数都输出字符串的长度:42
一个字符串的元表包含...
print(count(getmetatable(str).__index))
17
...功能,让我们展示一下...
show(getmetatable(str).__index)
len=function=function: 0x565fe2c0
pack=function=function: 0x566005f0
dump=function=function: 0x565ffc80
gsub=function=function: 0x56601560
format=function=function: 0x565ff030
byte=function=function: 0x565fe4b0
packsize=function=function: 0x56600110
char=function=function: 0x565fef10
reverse=function=function: 0x565fe830
rep=function=function: 0x565fe9f0
find=function=function: 0x56601550
upper=function=function: 0x565fe7a0
sub=function=function: 0x565fe8c0
gmatch=function=function: 0x565fee70
unpack=function=function: 0x56600250
match=function=function: 0x56601540
lower=function=function: 0x565feba0
... count()和show()是用于表的简单自脚本函数...
function count(array) local incr=0 for _ in pairs(array) do incr=incr+1 end return incr end
function show(array) for key,value in pairs(array) do printf("%s=%s=%s\n",key,type(value),value) end end
function printf(s,...) io.write(s:format(...)) end
字符串具有一个元表的事实让我尝试设置__call并对其进行测试...
getmetatable(str).__call=function() return 'I do not like apples!' end
print(str, str())
...呵呵,多数民众赞成在工作,输出是...
Doomsday starts with: Tah tah tah Taaaahhh I do not like apples!