代码之家  ›  专栏  ›  技术社区  ›  Greg Robertson

端口[原点]。从JavaScript到Swift的concat(ray(nextStep))

  •  0
  • Greg Robertson  · 技术社区  · 9 年前

    我正在将一个光线投射器从JavaScript移植到Swift,我很难理解下面这行代码在做什么:

    [origin].concat(ray(nextStep))    
    

    以下是完整的功能:

    function ray(origin) {
        var stepX = step(sin, cos, origin.x, origin.y);
        var stepY = step(cos, sin, origin.y, origin.x, true);
        var nextStep = stepX.length2 < stepY.length2 ? inspect(stepX, 1, 0, origin.distance, stepX.y) : inspect(stepY, 0, 1, origin.distance, stepY.x);
    
        if (nextStep.distance > range) return [origin];
        return [origin].concat(ray(nextStep));
    }
    

    有人能帮我解释一下在这种情况下[]括号代表什么,以及在这种情况中concat会做什么?

    谢谢

    格雷格

    1 回复  |  直到 5 年前
        1
  •  2
  •   Oriol    9 年前

    这取决于。 Array.prototype.concat 返回一个新数组,如果它们不是数组,则其元素是参数,如果它们是数组,则返回其中的项。

    如果 ray(nextStep) 不是数组,它将等效于

    [orgin, ray(nextStep)]
    

    如果 射线(下一步) 是一个数组,它将等价于

    [orgin, ...ray(nextStep)]
    

    例如

    [1,2,3].concat(4, [5,6], 7); // [1,2,3,4,5,6,7]