Lua没有班级但是点运营商?

时间:2017-06-13 12:58:38

标签: lua

如果Lua没有课程,为什么它有一个点运算符?

EG。在string.find中,string是一个具有静态/类方法find的类吗?

2 个答案:

答案 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!