source

ES6의 화살표 함수 구문을 제너레이터와 함께 사용할 수 있습니까?(표준 표기법)

factcode 2022. 9. 25. 00:14
반응형

ES6의 화살표 함수 구문을 제너레이터와 함께 사용할 수 있습니까?(표준 표기법)

즉, 어떻게 표현하면

function *(next) {}

화살표 구문을 사용하시겠습니까?제가 생각할 수 있는 모든 조합을 시도해 봤지만, 거기에 대한 문서를 찾을 수가 없어요.

(현재 Node.js v0.11.14를 사용하고 있습니다).

ES6의 화살표 함수 구문을 제너레이터와 함께 사용할 수 있습니까?

그럴수는 없어요.미안하다.

MDN에 준거

function*영어)function키워드 뒤에 아스타리스크)를 지정하면 제너레이터 함수가 정의됩니다.

스펙 문서(중요한 점)

함수 구문이 확장되어 옵션 추가* 삭제:

FunctionDeclaration: "function" "*"? Identifier "(" FormalParameterList? ")" 
  "{" FunctionBody "}"

인라인 함수와 화살표 함수의 차이

우선 화살표 기능 () => {}는 인라인 를 대체하기 만들어지지 않습니다.function(){}그리고 그들은 다르다.인라인 함수는 단순한 함수이기 때문에 문제는 화살표 함수와 인라인 함수의 차이입니다.

함수.this,arguments,super , 「」new.target화살표 함수는 항상 익명입니다.

자세한 내용은 이쪽


Arrow 함수를 생성기로 사용할 수 없는 이유

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

yield 키워드 사용

yield 키워드는 화살표 함수의 본문에서는 사용할 수 없습니다(해당 키워드에 추가 중첩된 함수 내에서 허용되는 경우는 제외).따라서 화살표 기능을 제너레이터로 사용할 수 없습니다.

다음 기능이 없는 발전기에 주의해 주십시오.yield말도 안 돼


화살표 함수가 수율을 사용할 수 없는 이유

http://tc39wiki.calculist.org/es6/arrow-functions/

는 '바인드'를 합니다.thisbind "bind" bindreturn블록 본문 케이스에서 바로 둘러싸인 화살표 기능에서 돌아와 제외합니다.break ★★★★★★★★★★★★★★★★★」continue화살표 함수의 바로 바깥쪽 문장을 참조하지 않도록 합니다.

식별자 기본 표현식arguments화살표 함수의 본문(식 또는 블록 형식)에는 사용할 수 없습니다.

저저마마 likewise likewise likewise likewise likewise likewise likewise likewise.yield화살표 기능의 본문에는 사용할 수 없습니다.화살표는 생성기가 될 수 없으며 깊은 연속은 원하지 않습니다.

Arrow-Function에서 Yield in a Arrow-Function이 의미 오류를 발생시킵니다.http://www.ecma-international.org/

최종적으로는 ECMA6의 실장이 매우 복잡하기 때문입니다.C#에서는 다소 유사한 이유로 이것도 허용하지 않습니다.

위에서 언급한 2013년 11월esdiscuss.org 및 Ecma TC39 위원회 ES6 회의 노트에 대한 논의와 더불어, 발전기 화살표는 2016년 9월 두 차례의 ES7 회의에서 다시 검토되었다[1][2].다양한 구문의 장단점에 대해 논의한 후(주로=*> ★★★★★★★★★★★★★★★★★」=>*그리고 이 기능에 대한 근거와 사용 사례가 부족하여 다음과 같은 결론을 내렸습니다.

  • 위원회로부터 약간의 관심이 있지만, 이 기능이 새로운 구문 추가에 힘을 실어주지 않는 것이 우려됩니다.
  • 하여 3일째를 수 합니다.=>* 제안의한다.

발전기 화살의 제안은 브렌단 아이히와 도메닉 데니콜라가 챔피언으로 있는 스테이지 1로 옮겨졌다.에서 언급한 비동기 반복2018년에 완료되어 구현되었습니다.

2019년 10월, 세르게이 루바노프의 공식 보고서가 등장해 구문 및 기타 세부 사항에 대해 더 많은 논의를 했다.

저도 같은 질문을 받고 왔습니다.투고나 코멘트를 읽고, 화살표 기능에 제너레이터를 사용하는 것이 애매하다고 느꼈습니다.

const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word

이것이 화살표 기능과 관련하여 발전기를 구현하지 않은 가장 큰 이유일 수 있습니다.


하지만 만약 내가 그들 중 하나였다면, 나는 이렇게 생각할 수 있었을 것이다.

const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^

이것은 마치 비동기 함수가 있는 것처럼 느껴집니다.

const asyncFunction = async () => ... // pretty cool

통상의 함수에서는, async 키워드가 존재하기 때문에, 화살표 함수는 그것을 이용하고 있습니다.async () =>으로 보기에 좋다async function().

이런 gen ★★★★★★★★★★★★★★★★★」generator애러 기능은 사용하지 않습니다.

결론:

화살표 함수로 제너레이터를 구현하고 싶어도 코어 js의 제너레이터 구문에 대해 다시 생각해 볼 필요가 있다고 생각합니다.

generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}

그리고 이것은 큰 실수가 될 것이다.발전기에 화살이 닿지 않게 하는 것은 꽤 멋진 일입니다.


다음 @Bergi 코멘트:

아니요. 화살표 기능은 가볍고(예를 들어 .protype은 없습니다), 종종 한 줄짜리이지만 제너레이터는 거의 반대입니다.

발전기의 용도는 런스톱 런이므로 시제품이나 어휘적인 것 등은 신경 쓸 필요가 없다고 생각합니다.

현재는 할 수 없지만, 향후는 1단계인 2019년 10월에 TC39의 발매 제안이 있기 때문에 그럴 수 있습니다.

시간이 많이 늦었다는 건 알지만, 구문 때문일 수도 있어요.(*() => {})동작합니다만,(9 ** () => {})9의 화살표 함수 제곱은 반환입니까?NaN또는 제너레이터 화살표 기능을 9번 반복하여 반환할 수도 있습니다.NaN대체 구문을 사용하여 수행할 수 있습니다.=>*여기서 언급한 다른 답변에 따르면, 생성기 함수 구문의 일관성을 유지하고자 하는 욕구가 있었을 수 있습니다(예: function* () {} ★★★★★★★★★★★★★★★★★」{ *genMethod() {} }를 참조해 주세요(어느 쪽인가)변명이 아니라 이유가 있다.

redux-saga에 대한 좋은 해결 방법이 있습니다.

import { call, all } from 'redux-saga/effects';

function* gen() {
   yield all([].map(() => {
      return call(....);
   }));
}

언급URL : https://stackoverflow.com/questions/27661306/can-i-use-es6s-arrow-function-syntax-with-generators-arrow-notation

반응형