【问题标题】:A elegant solution to this repetitive code?这个重复代码的优雅解决方案?
【发布时间】:2020-03-28 11:43:42
【问题描述】:

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

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 的语言,但只要解决方案没有任何真正特定的内置函数,这应该是通用的。

【问题讨论】:

  • 嗨!我不熟悉 GML,但是从快速搜索和标签描述中我无法理解标签 Python。

标签: python gml


【解决方案1】:

回答您的问题并不容易。当然,你可以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
    }
}

现在看起来你的代码变长了,但也更容易维护:减少写&gt;而不是&lt;的风险,更改一次函数以更改所有检查等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2023-02-05
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2011-02-13
    相关资源
    最近更新 更多