【问题标题】:pass < or > operator into function as parameter?将 < 或 > 运算符作为参数传递给函数?
【发布时间】:2010-01-14 20:33:14
【问题描述】:

在我的函数内部有一个if() 语句,如下所示:

if(passedValue < staticValue)

但是我需要能够传递一个参数来指示 if 表达式是像上面还是这样:

if(passedValue > staticValue)

但我不能真正传递&lt;&gt; 运算符有一个参数,所以我想知道最好的方法是什么?

另外,如果我使用的语言对 ActionScript 3.0 很重要

谢谢!!

【问题讨论】:

    标签: actionscript-3 parameters operators


    【解决方案1】:

    与其传递一个运算符,这在 AS3 中是不可能的,为什么不传递一个自定义的比较函数呢?

    function actualFunction(passedValue:Number, compareFunction:Function) {
        /* ... */
    
        if(compareFunction(passedValue, staticValue)) {
            /* ... Do something ... */
        }
    
        /* ... */
    }
    

    然后使用它:

    actualFunction(6, function(x:Number, y:Number) {
         return x > y;
    });
    

    或:

    actualFunction(6, function(x:Number, y:Number) {
         return x < y;
    });
    

    【讨论】:

    • 很好的解决方案。或者,如果作者想将运算符作为字符串传递,他们可以将其用作查找以检索正确的函数(从字典或类似函数中)。它需要更多的设置,可以选择使用工厂进行简化,但会产生更清晰的代码。 (即:不在每个调用的地方创建一个动态函数)
    • "(即:不在每个调用位置创建动态函数)" - Flash 将函数优化为静态,因此不会降低性能。
    【解决方案2】:

    为什么不让函数以bool为参数,在调用函数时直接进行比较?

    ExampleFunction(arg1, (passedValue > staticValue))
    

    【讨论】:

    • 如果被调用者无权访问staticValue怎么办?
    【解决方案3】:

    我不知道 Actionscript,但你不能做一个变量叫:

    布尔大于=真;

    如果是真的,做>,如果是假的做

    【讨论】:

      【解决方案4】:

      你是对的,你不能传递运算符。您可以传递一个变量来指示要使用的运算符。

      lessThan = true;
      func(passedValue, lessThan); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2017-11-18
        相关资源
        最近更新 更多