当前位置: 首页 > news >正文

java网站留言板怎么做seo流量排名软件

java网站留言板怎么做,seo流量排名软件,阿里云万网域名查询,沈阳德泰诺网站制作一、元表 元表可以修改一个值在面对一个未知操作时的行为,Lua 中使用 table 作为元表的承载。 元表只能给出预先定义的操作集合的行为,比类会更加受限制,不支持继承。 Lua 每一个值都可以有元表 : 表和用户数据类型都具有各自…

一、元表

元表可以修改一个值在面对一个未知操作时的行为,Lua 中使用 table 作为元表的承载。

元表只能给出预先定义的操作集合的行为,比类会更加受限制,不支持继承

Lua 每一个值都可以有元表

  • 表和用户数据类型都具有各自独立的元表;
  • 其他类型的值则共享对应类型所属的同一个元表;

二、元表的设置

1、类型的原始元表

Lua 中,元表的设置只能针对 table ,其他类型都不能设置。

table 的初始化元表为 nil ,即没有设置元表,只能通过 setmetatable 进行设置,多个 table 可以共享一个 table 作为元表(当然也可以使用他自己作为自己的元表,因为他自身也是一个 table)

Lua 只有 string 初始化了元表,而且是针对了所有的字符串,即 string 都是同一个元表。其他的类型为 nil 。

print("表的初始值", getmetatable({}))           --> 表的初始值	nilprint("整型的初始值", getmetatable(10))         --> 整型的初始值	nil
print("浮点型的初始值", getmetatable(10.0))      --> 浮点型的初始值	nil--- 通过打印可以看到两个字符串的元表是同一个
print("字符串的初始值", getmetatable("江澎涌"))   --> 字符串的初始值	table: 0x600000b14640
print("字符串的初始值", getmetatable("jiangpengyong"))  --> 字符串的初始值	table: 0x600000b14640print("布尔型的初始值", getmetatable(true))     --> 布尔型的初始值	nilprint("nil的初始值", getmetatable(nil))         --> nil的初始值	nilfunction sayHello()  end
print("函数的初始值", getmetatable(sayHello))   --> 函数的初始值	nil

2、设置元表和获取元表

2-1、setmetatable(table, metatable)

给表 table 设置元表 metatable

参数

  • table:要被设置元表的表
  • metabale:元表,如果值为 nil ,则表明要删除 table 的原有元表。如果原来的元表有 __metatable 字段,则不能再设置元表,否则会抛出异常 cannot change a protected metatable

__metatable 会在下面的 “表相关方法” 小节分享

返回值:

返回被设置元表的表,就是参数 table

2-2、getmetatable(object)

如果 object 没有元表,则返回 nil

如果对象 Object 有元表,且该元表有一个 "__metatable" 字段,则返回关联的值。否则,返回给定对象 Object 的元表

2-3、举个例子

local oriTable = {}
local metaTable = {}
print(setmetatable(oriTable, metaTable), oriTable, metaTable)       --> table: 0x600001ac0840	table: 0x600001ac0840
print(getmetatable(oriTable), metaTable)                            --> table: 0x600001ac0900	table: 0x600001ac0900

给元表带有 __metatable 字段的表,设置新的元表,则会抛出异常(见下图)

t2 = { c = 1 }
t2.__metatable = { a = 1 }
s1 = {}
setmetatable(s1, t2)
print('getmetatable(s1)["a"]', getmetatable(s1)["a"])           --> getmetatable(s1)["a"]	1-- 此处会抛出异常:cannot change a protected metatable
print(setmetatable(s1, {}))

三、元表方法

1、具有的元方法

元表方法方法很像 kotlin 中的操作符方法

1-1、算术运算符

元表方法含义
__add加法
__mul乘法
__sub减法
__div除法
__floorfloor除法
__unm负数
__mod取模
__pow幂运算
__band按位与
__bor按位或
__bxor按位异或
__bnot按位取反
__shl向左移
__shr向右移
__concat定义连接运算符

1-2、关系运算符

元表方法含义
__eq等于
__lt小于
__le小于等于

值得注意: ~=a > ba >= b 没有对应的元方法,会被转为如下

  • a ~= b 会被转为 not( a == b)
  • a > b 会被转为 b < a
  • a >= b 会被转为 b <= a

关系运算符遇到两个不同类型的对象,则会直接返回 false ,不会进行搜寻任何的元方法

1-3、库相关方法

元表方法含义
__tostring当调用 tostring 时,会先检查值是否有一个元方法 __tostring ,有则会先使用。
__metatable使用该元方法可以保护元表,用户无法获取也无法修改该元表。当元表设置了 __metatable 的字段,则 getmetatable 会返回这个字段的值,而 setmetatable 则会引发错误
__pairs从 Lua 5.2 开始,当元表拥有一个 __pairs 的元方法时,pairs 会调用这个元方法来完成遍历

1-4、表相关方法

元表方法含义
__index一旦访问 table 中不存在的字段,正常情况下会返回 nil 。如果设置了这个元表方法,则会调用自身元表对应的该 __index 元方法,并以被调用的表(即此处的 table ,不是元表)和键作为参,进行调用。也可以给 __index 设置一个 table,这样就会直接在这table 中查询,速度比方法稍快。可以通过 rawget 获取原始数据,不考虑元表。
__newindex当调用 table 进行索引赋值时,如果设置了该元表方法,则会使用被调用的表(即此处的 table ,不是元表),键和值作为参,调用该方法。同样也可以给 __newindex 设置一个表,则会将值直接存至该表。可以通过 rawset(talbe, key, value) 相当于 table[key] = value 进行直接对 table 的赋值,不考虑元表。
__len获取 table 的长度时,会调用该方法,获取长度

__index__newindex 的异同

  • 相同点:两个函数都是发生在 table 中没有对应的 key 时触发
  • 不同点:当前需要的索引没有对应的值时则调用 __index ,如果 table 设置值时,则调用 __newindex

2、元方法的搜索

如果两个变量相加,搜索规则如下:

  1. 先查看第一个值是否有元表,并且是否存在所需元方法,如果存在则使用该元方法,此时第二个值的元方法被忽略。否则进入下一条
  2. 查看第二个值是否有元表,并且是否存在所需的元方法,如果有则进行使用。否则进入第三条
  3. 抛出异常

3、举个例子

这里元方法比较多,就不一一粘贴代码了,不然会让文章非常冗长。建议各位童鞋们移步 github clone 下代码自行运行一下会更加深刻理解。

“算术运算符” 、 “关系运算符”、“库相关方法” 相关的代码 可以查看以下的代码:

集合.lua:https://github.com/zincPower/lua_study_2022/blob/master/13%20%E5%85%83%E8%A1%A8%E3%80%81%E5%85%83%E6%96%B9%E6%B3%95/%E9%9B%86%E5%90%88.lua

集合调用.lua:https://github.com/zincPower/lua_study_2022/blob/master/13%20%E5%85%83%E8%A1%A8%E3%80%81%E5%85%83%E6%96%B9%E6%B3%95/%E9%9B%86%E5%90%88%E8%B0%83%E7%94%A8.lua

“表相关方法” 相关的代码

表相关元方法.lua:https://github.com/zincPower/lua_study_2022/blob/master/13%20%E5%85%83%E8%A1%A8%E3%80%81%E5%85%83%E6%96%B9%E6%B3%95/%E8%A1%A8%E7%9B%B8%E5%85%B3%E5%85%83%E6%96%B9%E6%B3%95.lua

四、写在最后

Lua 项目地址:Github传送门 (如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)

如果觉得本篇博文对你有所启发或是解决了困惑,点个赞或关注我呀

公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。

http://www.hengruixuexiao.com/news/19883.html

相关文章:

  • 吉利的网络营销方式深圳百度seo整站
  • 建设银行茂名网站seo英文全称
  • 电梯行业网站怎么做关键词优化价格表
  • 梅林做网站正规网络教育培训机构
  • 高端网站设计企业网站建设广州公司关键词网络推广
  • python 网站建设青岛网站建设策划
  • 做网站源码百度手机软件应用中心
  • 深圳网站建设哪家公司好关键词数据
  • 辽源网站建设百度账户安全中心
  • 株洲网站建设 英铭郑州网络营销
  • 谷歌网站建设代理营销存在的问题及改进
  • 建设部举报网站高级搜索技巧
  • 如何制作公司宣传片seo需要付费吗
  • 怎么做网站的导航无锡seo
  • 免费素材视频网站哪个最好联赛积分榜排名
  • 商城网站开发需要哪些人员河源市企业网站seo价格
  • 网站建设与管理 吴振峰成都私人网站制作
  • 网站开发者 敬请期待广州高端网站建设公司
  • 凡客优品官方网站对网站提出的优化建议
  • 自适应网站怎么做m站厦门人才网
  • 包头网络资深seo顾问
  • 河北省唐山市建设规划局的网站seo网站推广多少钱
  • python开源代码网站产品推广的渠道
  • 免费域名网站创建seo快排技术教程
  • 制作微信商城网站开发台州seo优化公司
  • 网站快速备案真的假的网站制作的重要性及步骤详解
  • 网站建设 精品课程网站一键生成
  • 厦门哪家做网站好公司网站建站要多少钱
  • 十八哥公司网站开发重庆的seo服务公司
  • 买一个域名多少钱一个电脑优化系统的软件哪个好