lua不修改函数参数

Din*_*cio 1 lua binary-tree arguments function lua-table

我一直在学习lua,似乎无法简单地实现这个二叉树的工作......

function createTree(tree, max)
    if max > 0 then
        tree = {data = max, left = {}, right = {}}
        createTree(tree.left, max - 1)
        createTree(tree.right, max - 1)
    end
end

function printTree(tree)
    if tree then
        print(tree.data)
        printTree(tree.left)
        printTree(tree.right)
    end
end

tree = {}
createTree(tree, 3)
printTree(tree)
Run Code Online (Sandbox Code Playgroud)

程序在执行后返回nil.我在网上搜索了解参数传递如何在lua中工作(如果它是通过引用或值)并且发现某些类型通过引用(如表和函数)传递,而其他类型通过值传递.尽管如此,我还是将全局变量"tree"作为一个表传递给了"createTree"函数,我甚至将"left"和"right"初始化为"createTree"中的空表,用于相同的目的.我究竟做错了什么?

Mik*_* V. 6

可能需要不是通过新表初始化,而只是设置其值.

function createTree(tree, max)
    if max > 0 then
        tree.data = max
        tree.left = {}
        tree.right = {}
        createTree(tree.left, max - 1)
        createTree(tree.right, max - 1)
    end
end
Run Code Online (Sandbox Code Playgroud)


lhf*_*lhf 5

在Lua中,参数按值传递.分配给参数不会更改原始变量.

试试这个:

function createTree(max)
    if max == 0 then
        return nil
     else
        return {data = max, left = createTree(max-1), right = createTree(max-1)}
     end
end
Run Code Online (Sandbox Code Playgroud)