JavaScript_javascript 기술로 수율을 실용적이고 간결하게 구현

WBOY
풀어 주다: 2016-05-16 18:25:05
원래의
1257명이 탐색했습니다.

방금 갑자기 아이디어가 떠올랐습니다. 다음 단계로 이동하여 반복자를 직접 순회하는 경우는 거의 없는데 왜 이 다음 단계를 구현해야 합니까? 이렇게 차례로 각각을 직접 구현하면 모든 것을 이해할 수 있고 곧 첫 번째 매우 간결한 버전을 작성했습니다.

코드 복사 코드는 다음과 같습니다.

functionyieldHost(yieldFunction)
{
반환 함수(프로세서)
{
var Yield = 함수(결과) )
{
processer(result)
};
yieldFunction(yield);
}
}

아이디어를 변경한 후 정말 간결해요.
먼저 예시를 첨부하고 원리에 대해 이야기해 보세요.
먼저 다음과 같이 열거할 함수가 필요합니다.
코드 복사 코드는 다음과 같습니다.

function fun(yield)
{
for (var i = 0; i < 100; i )
yield(i)
}

또는 이렇게:
코드 복사 코드는 다음과 같습니다.

function fun( Yield)
{
yield(1);
yield(3);
}

구현 방식이 C#과 다르기 때문입니다. , 따라서 루프에서는 본문에 Yield Break 또는 Yield Continue와 같은 구문이 필요하지 않으며 단지 Break 또는 Continue만 있으면 됩니다.
실제 적용을 위해 YieldHost 함수는 요구 사항을 충족하는 위의 재미있는 함수를 열거자로 변환할 수 있습니다.
var enumerator = YieldHost(fun)
이 열거자는 jQuery의 각 함수와 마찬가지로 실제로 함수입니다. , 열거형을 처리하는 핸들러 함수를 받습니다:

코드 복사 코드는 다음과 같습니다:
enumerator(function (item)
{
window.alert(item);
})

원리에 대해 이야기해 봅시다.
기존 열거자의 경우 열거자가 호출될 때마다 값을 반환해야 한다고 생각했지만 Chen Zihan이 말했듯이 이를 위해서는 항복 시 함수를 중지해야 합니다. 정말 귀찮습니다.
하지만! 실제로 대부분의 경우 foreach와 같은 구문을 사용하여 열거자에 액세스한다는 사실을 발견했습니다. 이는 다음 메서드를 구현하는 것이 아니라 각 메서드를 구현하는 매우 쉬운 방법을 제공합니다.
각 방법과 다음 방법의 차이점은 무엇인가요? jQuery에 익숙한 친구들은 각각의 메소드가 실제로는 열거형 값을 반환하는 대신 함수를 받아 열거형 값을 매개변수로 전달하는 것으로 간주할 수 있다는 것을 알 것입니다.
이번 조치로 모든 문제가 해결되었습니다. 함수 실행을 일시 중지할 필요는 없으며, 열거형 값을 처리하는 로직을 이 함수에 삽입하기만 하면 됩니다. 따라서 실제로 여기의 YieldHost는 열거자가 받은 함수(즉, window.alert(item))를 ​​열거 함수(즉, fun)에 삽입하여 반전 작업을 완료했습니다.

코드 복사 코드는 다음과 같습니다.
function fun(yield)
{
window.alert(1);
window.alert(2);
window.alert(3)
}

그래서 탄생한 것입니다.
이 매우 간단한 구현을 통해 다음 단계는 jQuery의 각 메서드처럼 중단에 대해 true를 반환하고 계속에 대해 false를 반환하는 함수를 구현하는 것입니다. 이러한 함수를 통해서만 무한 세트를 처리하거나 TakeWhile과 같은 함수를 구현할 수 있습니다. .
솔직히 말하면 JavaScript에 대한 연구가 철저하지 않습니다. 이것은 YieldHost의 두 번째 버전입니다.

코드 복사
코드는 다음과 같습니다. functionieldHost(yieldFunction) {
var 예외 = Math.random()
return 함수(프로세서)
{
try
{
yieldFunction(함수(결과)
{
if(프로세서(결과))
throw 예외;
} );
}
catch (e)
{
if (e !== 예외)
throw e;

물론 완벽하지는 않지만 이보다 더 좋은 것은 없습니다.
다음 단계는 이를 기반으로 Select와 Where를 구현하는 것입니다. 실제로는 매우 간단한 문제입니다.
코드 복사 코드는 다음과 같습니다.

function Select(enumerator, selector)
{
return function(fun)
{
enumerator (function (item )
{
return fun(selector(item));
})
}
}

수정하는 방법은 다음과 같습니다. 연속 버전을 선택하세요.
enumerator.Select( selector )( processor )
JavaScript에서는 이것이 정말 어려운 일이 아니라고 생각합니다. . . .
친숙한 구문을 조기에 도입하면 JavaScript가 매우 복잡하고 보기 흉해집니다. 그래서 나는 이것을 가지고 놀 수 있는 모든 사람에게 맡깁니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿