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/
는 '바인드'를 합니다.
this
bind "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() {}
그리고 이것은 큰 실수가 될 것이다.발전기에 화살이 닿지 않게 하는 것은 꽤 멋진 일입니다.
아니요. 화살표 기능은 가볍고(예를 들어 .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
'source' 카테고리의 다른 글
PHP의 글로벌 변수는 나쁜 관행으로 간주됩니까?그렇다면 왜? (0) | 2022.09.25 |
---|---|
MariaDB, PBXT 및 알 수 없는 쿼리 결과 (0) | 2022.09.25 |
JSch 사용 시 "비활성 개인 키" (0) | 2022.09.25 |
Python 'Requests' 모듈을 사용한 프록시 (0) | 2022.09.25 |
Java 32비트 및 64비트 호환성 (0) | 2022.09.25 |