1

I basically want to check if newValue goes past targetValue. But targetValue could be either a positive or negative number, so if ( newValue < targetValue ) won't necessarily work.

I coded it the way below, and I may be overthinking things here but I wondered if there's a way to rewrite the if-check a bit more elegantly…</p>

var newValue = 0;

function ChangeValue ( targetValue : int )
{
    var isTargetPositive = ( targetValue > 0 );

    if ( isTargetPositive && newValue < targetValue || !isTargetPositive && newValue > targetValue )
        newValue = math.moveTowards( newValue, targetValue, 1 );
    else
        // Do something else
}
4

5 回答 5

2

我能想到的唯一能让您的条件保持原样的方法是删除isTargetPositive变量并用以下内容替换您的 if 语句:

if ( targetValue > 0 ? newValue < targetValue : newValue > targetValue )
于 2013-10-26T01:41:39.190 回答
2

这与我更改的国际象棋项目中的情况几乎相同:

if((obj.ActiveColor&&current_val>0) || (!obj.ActiveColor&&current_val<0)){}

var impossible_to_name = (current_val * (obj.ActiveColor?1:-1));

if(impossible_to_name>0){}

我知道你不需要缓存 var,但就我而言,我稍后会使用它,所以我缓存了它,我的代码太复杂了,我什至无法给我的 var 起一个正确的名称,我也是不完全确定这是否会对您有所帮助,如果我无法将其翻译成您的代码,那么您可能也不能,但我会尝试再次理解我的代码并对我的答案进行编辑。

注意:我的代码被包装了,if(current_val){...}所以值是除了0

于 2013-10-26T02:18:42.023 回答
1
var newValue = 0;
    function ChangeValue ( targetValue )
    {
        if ( 
    ((targetValue > 0) && (newValue < targetValue)) 
    || 
    ((targetValue < 0) && (newValue > targetValue ))
           )
        {
            newValue = math.moveTowards( newValue, targetValue, 1 );
        }    
        else{
            // Do something else
        }
    }
于 2013-10-26T01:50:40.093 回答
1

如果不够清楚,您可以随时制作子功能

function abs_compare(target, number) {
    return target != 0 && ((target > 0 && target > number) || target < number);
}

if (abs_higher(targetValue, newValue)) {
    newValue = math.moveTowards(newValue, targetValue, 1);
}

我也宁愿target != 0而不是仔细检查它是否优于或低于 0,因为在您的条件语句中更清楚地表明它是一个禁止值。

此外,Pointy 说,由于您已将 newValue 初始化为 0,因此它将始终保持为 0,这目前是错误的,因为 ChangeValue 是一个函数。newValue 可以在函数调用之前更改。

更新

我可能读得太快了。将 target 与 0 进行比较不会保留您的实际逻辑,它与仔细检查相同。无论如何,您仍然可以使用函数。

最好的答案也宁愿使用条件target > 0 ? target > number : target < number

于 2013-10-26T02:03:34.553 回答
-1

测试(输入:5) isTargetPositive - 匹配 newValue < targetValue - 匹配

测试(输入:-1)!isTargetPositive - 匹配 newValue > targetValue - 匹配

+ve 或 -ve 整数,它将匹配 IF。

isTargetPositive && newValue < targetValue,对吗?为什么使用 &&?我认为一个条件就足够了。

于 2013-10-26T01:50:13.420 回答