gpt4 book ai didi

function - 用一个函数代替一个函数的多个输入?

转载 作者:行者123 更新时间:2023-12-02 22:15:16 24 4
gpt4 key购买 nike

我试图看看是否可以通过使用一个生成多个输出以与另一个函数一起使用的函数来简化输入。我有什么办法可以做到这一点吗?我是否必须创建一个函数来为每个输入返回单个变量?

--here is a snippet of what im trying to do (for a game)
--Result is the same for game environment and lua demo.

en = {
box ={x=1,y=2,w=3}
}
sw = {
box = {x=1,y=2,w=3}
}

function en.getbox()
return en.box.x,en.box.y,en.box.w,en.box.w
end

function sw.getbox()
return sw.box.x,sw.box.y,sw.box.w,sw.box.w
end

function sw.getvis()
return true
end

function CheckCollision(x1,y1,w1,h1, x2,y2,w2,h2)
return x1 < x2+w2 and
x2 < x1+w1 and
y1 < y2+h2 and
y2 < y1+h1
end

if CheckCollision(en.getbox(),sw.getbox()) == true then
if sw.getvis() == true then
en.alive = false
end
end

print(tostring(en.alive))

我期待敌人 (en) 死亡 (en.alive = false),但我收到错误:输入:25:尝试对 nil 值(本地“w2”)执行算术

最佳答案

您可以在此处找到所遇到问题的说明:Programming in Lua: 5.1 – Multiple Results

我建议您阅读整个页面,但这里有一个相关部分

A function call that is not the last element in the list always produces one result:

x,y = foo2(), 20 -- x='a', y=20

x,y = foo0(), 20, 30 -- x=nil, y=20, 30 is discarded

<小时/>

我建议进行以下更改以使您的代码正常运行。将 getbox 的输出包装到一个带有清晰键的表格中,使其易于理解。

  function en.getbox()
return {
x = en.box.x,
y = en.box.y,
w = en.box.w,
h = en.box.w
}
end

function sw.getbox()
return {
x = sw.box.x,
y = sw.box.y,
w = sw.box.w,
h = sw.box.w
}
end

function CheckCollision(o1, o2)

return o1.x < o2.x + o2.w and
o2.x < o1.x + o1.w and
o1.y < o2.y + o2.h and
o2.y < o1.y + o1.h
end

或者,您可以“即时”包装 getbox 的输出,如下所示:

function CheckCollision(o1, o2)

return o1[1] < o2[1] + o2[3] and
o2[1] < o1[1] + o1[3] and
o1[2] < o2[2] + o2[4] and
o2[2] < o1[2] + o1[4]
end

if CheckCollision({en.getbox()}, {sw.getbox()}) == true then
if sw.getvis() == true then
en.alive = false
end
end

相对于最后一个选项,我强烈鼓励第一个选项。最后一个选项会导致代码更难理解,并且应该附有清晰的注释来解释它。

关于function - 用一个函数代替一个函数的多个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57064564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com