Lua中Metatable.__index如何修改成长尾?

2026-04-01 20:431阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计500个文字,预计阅读时间需要2分钟。

Lua中Metatable.__index如何修改成长尾?

在我之前的问题中,我曾询问为何我的方法并非由Lua找到,而是被通知将通过将__index设置为metatable来解决,它会解决这个问题。所以,我假设当某个方法被调用时,是通过metatable中的索引进行搜索的。然而,我遇到了问题。

我之前问过为什么我的方法不是由Lua找到我的方法,并且被告知通过将__index设置为我的metatable,它会解决问题,所以我假设一个方法被调用时是通过metatable中的索引进行搜索,但是我遇到了一个问题,因为我需要在myatable上使用索引括号[和],所以__index被指定从其中的表中返回索引,如何解决两种使用方法的功能需求,和使用索引括号

我写了一个指示问题的最小例子:

TestMetatable = {DataTable = {}} TestMetatable.__index = TestMetatable function TestMetatable.new() local Tmp = {} setmetatable(Tmp,TestMetatable) Tmp.DataTable = {1} return Tmp end function TestMetatable:TestMethod() print("Ran Successfully") end function TestMetatable.__index(self,index) return self.DataTable[index] end local Test = TestMetatable.new() -- both functionalities are needed print(Test[1]) Test:TestMethod() 您需要了解__index和__newindex之间的区别,以及它们与主表当前内容的关系.

只有满足以下所有条件时才会调用/访问__newindex:

>当您在主表中设置值时,通过tbl [index] = expr(或等效语法,如tbl.name = expr).
>当您尝试设置到主表中的键在主表中不存在时.

Lua中Metatable.__index如何修改成长尾?

第二个经常骚扰人们.这就是你的问题,因为只有在以下情况下才能访问__index:

>从主表中读取的键在主表中尚不存在时.

因此,如果要过滤每个读取和写入表,那么该表必须始终为空.因此,这些读取和写入需要进入您为每个新对象创建的其他表.因此,您的新函数需要创建两个表:一个保持为空,另一个表中包含所有数据.

老实说,我希望Lua有办法创建一个空的userdata,你可以将用户定义的metatable绑定到,只是为了避免这些问题.

本文共计500个文字,预计阅读时间需要2分钟。

Lua中Metatable.__index如何修改成长尾?

在我之前的问题中,我曾询问为何我的方法并非由Lua找到,而是被通知将通过将__index设置为metatable来解决,它会解决这个问题。所以,我假设当某个方法被调用时,是通过metatable中的索引进行搜索的。然而,我遇到了问题。

我之前问过为什么我的方法不是由Lua找到我的方法,并且被告知通过将__index设置为我的metatable,它会解决问题,所以我假设一个方法被调用时是通过metatable中的索引进行搜索,但是我遇到了一个问题,因为我需要在myatable上使用索引括号[和],所以__index被指定从其中的表中返回索引,如何解决两种使用方法的功能需求,和使用索引括号

我写了一个指示问题的最小例子:

TestMetatable = {DataTable = {}} TestMetatable.__index = TestMetatable function TestMetatable.new() local Tmp = {} setmetatable(Tmp,TestMetatable) Tmp.DataTable = {1} return Tmp end function TestMetatable:TestMethod() print("Ran Successfully") end function TestMetatable.__index(self,index) return self.DataTable[index] end local Test = TestMetatable.new() -- both functionalities are needed print(Test[1]) Test:TestMethod() 您需要了解__index和__newindex之间的区别,以及它们与主表当前内容的关系.

只有满足以下所有条件时才会调用/访问__newindex:

>当您在主表中设置值时,通过tbl [index] = expr(或等效语法,如tbl.name = expr).
>当您尝试设置到主表中的键在主表中不存在时.

Lua中Metatable.__index如何修改成长尾?

第二个经常骚扰人们.这就是你的问题,因为只有在以下情况下才能访问__index:

>从主表中读取的键在主表中尚不存在时.

因此,如果要过滤每个读取和写入表,那么该表必须始终为空.因此,这些读取和写入需要进入您为每个新对象创建的其他表.因此,您的新函数需要创建两个表:一个保持为空,另一个表中包含所有数据.

老实说,我希望Lua有办法创建一个空的userdata,你可以将用户定义的metatable绑定到,只是为了避免这些问题.