2017-04-24 7 views
1

더 나은 방법이 있어야하지만 정확한 원인은 확실하지 않습니다.이 스프레드 연산자가 런타임에 충돌하는 이유는 무엇입니까?

다음은 코드 스 니펫을 먼저 보여 드리겠습니다. 잠시 후에 해체하겠습니다.

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']]; 
 

 
this.evalArgsFromArr = function() { 
 
    var out = []; 
 
    for (var _ = 0; _ < parent.argArr.length; _++) { 
 
    out.push(someFunction(...parent.argArr[_])); // This part crashes 
 
    } 
 
    return out; 
 
};

이 기능은 물론, 오브젝트의 일부

.

parent.argArr의 각 항목은 someFunction()에 대한 두 개의 인수가 포함 된 배열이어야하며, 이는 출력을 사람이 읽을 수있는 형태로 제공하기도합니다. 내 이해는 반복 가능한 객체 (예 : parent.argArr에 저장된 배열)에서 사용되며 스프레드 연산자는 각 개별 값을 개별적으로 출력합니다. 예를 들어, for 루프의 첫 번째 실행은 someFunction('arg1', 'arg2')을 출력해야합니다.

Node.js 또는 PHP에서이를 포함하는 파일을 실행할 때마다 런타임이 즉시 호출되지만 아직 전파되지 않고 충돌이 발생합니다 예기치 못한 조작자 [...]. 도움이된다면 여기

는 오류 메시지입니다 : 이 Error Message

+0

실행 가능한 예를 제공 할 수 있습니까? –

+0

node.js의 버전은 무엇입니까? – Vovan

답변

-1

당신은 삭제해야 "..."시도 :

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']]; 

this.evalArgsFromArr = function() { 
    var out = []; 
    for (var _ = 0; _ < parent.argArr.length; _++) { 
    out.push(someFunction(parent.argArr[_])); 
    } 
    return out; 
}; 
+0

배열 요소를'...'가 제거 된 개별 함수 인수에 어떻게 넣어야합니까? – rsp

+1

나는 "당신이 반드시 지워야한다고 말하는 것 같은 느낌이 든다."... "최악의 경우 오히려 도움이되지 않고 최악의 경우가 잘못되었습니다. 특히, 여러분이 작성한 방식대로, 전체 배열을 개별 인수로서의 구성 요소가 아닌 단일 인수로 전달합니다. 이것이 바로 퍼스트 오퍼레이터를 사용하는 이유입니다. – Papayaman1000

4

을 나는이 변수 이름으로 밑줄 사용에 대한 처벌 생각 . 하지만 진지하게, 당신의 코드를 살펴보면 노드 인터프리터가 그것을 지원할만큼 충분히 새로운 경우에만 작동하는 것으로 보입니다.

는 참조 노드 버전에서 확산 연산자의 지원을 보려면 :

기본적으로 지원하지 않는 플랫폼에서 현대 구문을 사용하려면, 바벨을 사용

실행 가능한 예제를 제공하지 않았기 때문에 물론 테스트 할 수 없습니다.

하지만 당신은이 답변을 볼 수

당신이 예제를 실행 할 수 있는지. 스프레드 연산자를 사용하고 올바르게 작동하는지 테스트 한 경우 시스템에서 실행되면 스프레드 연산자를 사용할 수 있어야합니다. 그렇게하지 않으면 오래된 버전을 사용할 이유가 없기 때문에 노드를 실제로 업그레이드해야합니다.

someFunction(...array); 

에 :

그런데 한 줄이 "추락하기를 좋아합니다"라고 말하면 무슨 뜻인지 확실하지 않습니다. 항상 충돌하지는 않습니까? 매우 이상 할 것입니다.

+0

노드 7.8.0을 실행 중이므로 작업 할 수 있습니다 ... hm. 나는'apply'를 피하고 싶습니다. 왜냐하면 코드에 꽤 나쁜 영향을주기 쉽기 때문입니다. – Papayaman1000

+0

@ Papayaman1000 노드 7.8.0을 사용하면 제대로 작동합니다. 실행 가능한 예제를 제공했다면 누군가가 잘못된 것을 말할 수 있습니다. 질문에있는 스 니펫을 실행하여 오류를 재현 할 수 없습니다. – rsp

+0

전체 파일을 덤프하는 것 외에 무엇을 제공해야할지 모르겠습니다. 그것이 적절하거나 유용할까요? – Papayaman1000