Lua 中是否有像 jQuery 中的 'this' 类型选择器?

我正在尝试创建一个构造函数。

DialogData_Constructor = {

    name = "", id = "", has_blocked = false, blocked_by = false, messages = { }, time_stamps = { },

    New = function()
        local tab = {}
        for i, v in pairs(DialogData_Constructor) do
            tab[i] = v
        end
        return tab
    end,

    AddNewMessage = function( message, time_stamp )
        table.insert ( .messages, message ) -- 我该如何向该表中插入新数据?
        table.insert ( .time_stamps, time_stamp)
    end
}

所以我的问题是,在 AddNewMessage 函数中,如何识别或选择该表?

点赞
用户7396148
用户7396148

在 Lua 中使用面向对象编程时,您需要使用 : 语法和 self 变量。

Programming in Lua: 16 – Object-Oriented Programming

当您执行 someTable:someMethod() 时,您要将表作为第一个值传递给它,它是语法糖 sometable['someMethod'](sometable)

在 Lua 中进行面向对象编程时,另一个需要注意的事项是在构造函数中使用 setmetatable

有了这个知识,您的类将如下所示

DialogData_Constructor = {
  New = function(self)
    local o = { -- fields whose values are unique to each instance should be defined here.
      name = "",
      id = "",
      has_blocked = false,
      blocked_by = false,
      messages = { },
      time_stamps = { },
    }
    return setmetatable(o, {__index = self})
  end,

  AddNewMessage = function(self, message, time_stamp )
    table.insert (self.messages, message)
    table.insert (self.time_stamps, time_stamp)
  end
}

使用方法如下所示。

local mydialogData = DialogData_Constructor:New();
mydialogData:AddNewMessage("message", os.time())
2021-03-31 05:21:14