这个重复代码的优雅解决方案?

2024-03-28 14:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段代码,但看起来应该有一种方法可以用更少的行/代码来完成

if (TargetX > Origin[0] + Range) TargetX = Origin[0] + Range;
if (TargetY > Origin[1] + Range) TargetY = Origin[1] + Range;
if (TargetX < Origin[0] - Range) TargetX = Origin[0] - Range;
if (TargetY < Origin[1] - Range) TargetY = Origin[1] - Range;

我正在使用一种叫做GML的语言,但只要解决方案没有任何真正特定的内置函数,这种语言就应该是通用的


Tags: 方法函数代码语言ifrangeorigin解决方案
1条回答
网友
1楼 · 发布于 2024-03-28 14:46:09

回答你的问题不容易。当然,您可以dry更新代码

请注意,您可以将通话简化为:

abs(target - origin) < range

这会告诉您,在两个方向上,您的目标是否在范围origin ± range内。现在你知道了,如果你的目标在射程之外,你需要采取行动。这可以再次简化:您只需要检查target是否大于origin,反之亦然

最后,您应该对目标和源使用数组,或者定义一个可以调用的函数。显然,每次的射程都是相同的

您可以使用以下函数:

f(target, origin, range) {
    if (abs(target - origin) > range) {
        target = (target - origin) < 0 ? target-range : target+range
    }
}

现在,代码看起来变长了,但维护起来也更容易:减少编写>而不是<的风险,更改函数一次以更改所有检查,依此类推

相关问题 更多 >