Lua自定义数字连接

我一直在学习 Lua 中的元表,并希望实现 Ruby 中的范围操作符,因此我使用了这个模型:

debug.setmetatable(1, {
    __concat = function(a, b)
        if a > b then
            error(table.concat({
                "attempt to create a range of values with a",
                "minimum larger than the maximum"
            }, " "))
        elseif a == b then
            return a
        else
            return unpack((function(nStart,nEnd)
                local nTable = {}
                for it = nStart,nEnd do
                    table.insert(nTable, it)
                end
                return nTable
            end)(a, b))
        end
    end
})

print(6 .. 6)

但似乎它继续使用默认行为。 有没有办法让它工作? 我知道我可以创建一个函数来模拟该行为,并使用 range(n,n2) 或类似的调用该函数,但这会失去意义。 谢谢。

点赞
用户828255
用户828255

请查看 Lua 5.2 手册中的3.4.5节

在 Lua 中,字符串连接运算符用两个点号('..')表示。 如果两个操作数均为字符串或数字,则它们将根据§3.4.2中提到的规则转换为字符串。 否则,将调用__concat元方法(参见§2.4)。

如果您想更改此行为,请查看lvm.c中的luaV_concat函数。

2013-11-22 19:09:11