metatable

    3熱度

    2回答

    我試圖在Lua中實現我自己的字符串長度方法。 我已經成功覆蓋了字符串的len()方法,但我不知道如何爲#操作符執行此操作。 orig_len = string.len function my_len(s) print(s) return orig_len(s) end string.len = my_len abc = 'abc' 如果我稱之爲: print(ab

    6熱度

    1回答

    我無法理解爲什麼會出現在這些之間的__index元方法的行爲,以實例的差異: A = { __index = A } function A:speak() print("I'm an A") end An_A = setmetatable({},A) An_A:speak() 會引發以下錯誤:lua: l.lua:8: attempt to call method 'spea

    4熱度

    2回答

    在以下示例中,創建了一個userdata值,類型爲MyType,並使用元函數__tostring創建了一個表,其中調用LI_MyType__tostring。該代碼創建了一個基於閉包的lua OOP。我對所提供的例子抱怨,似乎只有一種方法可以通過upvalues將userdata與方法調用關聯起來。除非我想跨實例共享同一個metatable,否則這本身並沒有問題。 在一個理想的世界 - 我希望挖掘

    2熱度

    1回答

    是否可以將函數作爲Lua中的屬性推送? lua_pushcfunction(L,L_Getter); lua_setfield(L, -2, "GetValue"); lua_pushcfunction(L,L_Setter); lua_setfield(L, -2, "SetValue"); ,並要求他們在Lua像這樣: 現在,我可以促使他們爲像這樣的字段有get/set函數 M

    3熱度

    1回答

    ,所以我有這樣的LUA文件類似: x = { __index = x} constructor = function() local o = {} return setmetatable(o,x) end function x:print() print("hello world") end 我鍵入以下到interpretr: dofile "file

    3熱度

    1回答

    我正在學習Lua,使用Lua中的編程,第一版。我無法理解metatables。 這是代碼,並出現108頁面上的解釋: Set = {} function Set.new (t) local set = {} for _, l in ipairs(t) do set[l] = true end return set end function Set.union

    3熱度

    1回答

    我在Lua中有一個簡單的類實現。 test = {} test.__index = test function test:new() local o = {} setmetatable(o, self) return o end function test:setName(name) self.name = name print nam

    0熱度

    2回答

    我正在嘗試學習Lua,所以希望這是一個很容易回答的問題。以下代碼不起作用。變量childContext在類的所有實例之間泄漏。 --[[-- Context class. --]]-- CxBR_Context = {} -- Name of Context CxBR_Context.name = "Context Name Not Set" -- Child Context Li

    3熱度

    1回答

    我有一個表: Table = { button = {}, window = {}, label = {}, edit = {}, error = {} } 我怎樣才能獲得該表的鍵和值? 我就先爲: for key, value in ipairs(Table) do for k, v in ipairs(key) do

    4熱度

    1回答

    我已經在love2d引擎上做了一個luua控制檯,這是無關緊要的。我試圖升級metatables能夠影響更多的東西(對功能,改變另一張桌子上的metatable而不是目標的等),我正在創建的其中一個插件是一個__changeindex事件,當你修改現有指標。 爲了做到這一點,我必須爲用戶提供一個不包含值的虛擬表,並且當他們嘗試添加一些內容時,檢查它是否已經在實際表中定義,如果是,則調用__chan