函数返回了nil,但应该返回true或false。

function table.includeIndex(t,index)
    for k,v in pairs(t) do
        if k == index then
            return true
        end
    end
    return false
end

function table.delete_at(t,index)
    if table.includeIndex(t,index) then
        table.remove(t,index)
    end
end

function table.delete(t,value)
    if table.include(t,value) then
        table.delete_at(t,table.index(t,value))
        return value
    end
end

function table.index(t,item)
    for k,v in pairs(t) do
        if type(t[k]) == 'table' then
            if table.equal(t[k],item) then
                return k
            end
        else
            if t[k] == item then
                return k
            end
        end
    end
    return "none"
end

function table.dup(t)
    local w = {}
    for k,v in pairs(t) do
        w[k] = v
    end
    return w
end

function table.include(t,value)
    for k,v in pairs(t) do
        if t[k] == value then
            return true
        end
    end
    return false
end

function tab(tab)
    return setmetatable(tab,{__index=table})
end

function table.empty(t)
    for k,v in pairs(t) do
        if v ~= nil then
            return false
        end
    end
    return true
end

function table.reject(original,items)
    local t = table.dup(original)
    for k,v in pairs(items) do
        table.delete(t,v)
    end
    return t
end

---------------------------------------------------

function table.testrejectedArray(t,rejected,index)
    tab(rejected)
    if index == nil then
        index = 1
    end
    if rejected:empty() then -- 我说的这一行。
        print('yey')
        return true
    else
        if rejected:include(t[index]) then
            t:testrejectedArray(rejected:reject({t[index]}),index + 1)
        else
            if index < #t + 1 then
                t:testrejectedArray(rejected,index + 1)
            else
                print('haha')
                return false
            end
        end
    end
end

a = tab{1,2,3}
seq = tab{3,1,2}
w = seq:testrejectedArray(a)
print(w)

在'---'之前的所有东西只需要在运行代码时才需要。应该只发布代码本身。

函数'testrejectedArray'返回为nil,但应该返回true / false值。

当我运行代码时,它会打印' yey',因此如果运行了if块,但如何可能不返回一些内容,如果 "return true"是下一行?

关键是,如果我们将 'rejected:empty()'替换为'true',那么函数 'testrejectedArray'将返回true。那么函数返回false吗? 但是,如果我们将 'rejected:empty()'替换为'false',它将不会打印出' yey'。

所以'rejected:empty()'返回true,但由于某种原因它不会给我返回任何东西。

点赞
用户1442917
用户1442917

由于你在递归调用testrejectedArray,所以你需要在每次调用之前添加return

    if rejected:include(t[index]) then
        return t:testrejectedArray(rejected:reject({t[index]}),index + 1) --<--
    else
        if index < #t + 1 then
            return t:testrejectedArray(rejected,index + 1) --<--
        else
            print('haha')
            return false
        end
    end

如果你不这样做,那么递归调用之一返回的值不会被传递给调用函数。

2016-01-12 07:06:42