用一个函数替换多个输入?

Posted

技术标签:

【中文标题】用一个函数替换多个输入?【英文标题】:Substituting multiple inputs for a function with one function? 【发布时间】:2019-11-25 14:54:44 【问题描述】:

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

--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')

【问题讨论】:

您不能在CheckCollision(en.getbox(),sw.getbox()) 中随意放置一个元组 - 第一个元组将被调整为一个值。 Lua 非常奇怪的一面。 【参考方案1】:

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

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

不是列表中最后一个元素的函数调用总是产生一个结果:

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

x,y = foo0(), 20, 30 -- x=nil, y=20, 30 被丢弃


我建议进行以下更改以使您的代码正常工作。将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

我强烈推荐第一个选项而不是最后一个选项。最后一个选项会导致代码更难理解,应附有清晰的 cmets 解释。

【讨论】:

第一个解决方案效果很好!谢谢!我在想我可以在一个函数中添加多个变量,甚至用一个虚拟程序对其进行测试并且效果很好。

以上是关于用一个函数替换多个输入?的主要内容,如果未能解决你的问题,请参考以下文章

在不使用任何嵌套替换函数的情况下替换字符串中的多个字符

替换多个值+在 SQL 查询中?

#Oracle#PL/SQL:多个输入的替换变量

从输入中计算多个结果并在标签 KIVY 中替换

excel中if函数怎么用有多个条件,多个结果

T21:单词替换