ES6 Generator 및 C# 교체기
완대신의 책에서 묘사한 것을 이용하여
,Generator , 。 ,function ; , yield , (yield “ ”)。
사실 간단하게 말하면 각종 상태를 통해 함수는 여러 개의 값을 되돌릴 수 있다. 글을 보고 나니 다음과 같은 기능이 비교적 많이 사용될 수 있다고 생각한다
function* objectEntries(obj) {
let propKeys = Reflect.ownKeys(obj);
for (let propKey of propKeys) {
yield [propKey, obj[propKey]];
}
}
let jane = { first: 'Jane', last: 'Doe' };
for (let [key, value] of objectEntries(jane)) {
console.log(`${key}: ${value}`);
}
// first: Jane
// last: Doe
위 코드에서 대상
jane
의 원생은 Iterator 인터페이스를 갖추지 않아서 for...of
반복할 수 없습니다.이때, 우리는Generator 함수objectEntries
를 통해 그것을 캐리어 인터페이스를 추가하면 for...of
로 캐리어를 캐리어할 수 있다.캐리어 인터페이스를 추가하는 또 다른 방법은 Generator 함수를 대상의 Symbol.iterator
속성에 추가하는 것이다.function* objectEntries() {
let propKeys = Object.keys(this);
for (let propKey of propKeys) {
yield [propKey, this[propKey]];
}
}
let jane = { first: 'Jane', last: 'Doe' };
jane[Symbol.iterator] = objectEntries;
for (let [key, value] of jane) {
console.log(`${key}: ${value}`);
}
// first: Jane
// last: Doe
우아한Generator 비동기 응용 모듈:thunkify와co모듈;
C# yield
ES6의 Generator와 동일합니다.마이크로소프트 공식 문서를 참고할 수 있다.
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/yield
주로 예를 보십시오. 예는 뚜렷하고 교체기를 사용하여 매번 한 개의 값을 되돌릴 수 있지만 최종적으로 여러 개의 값을 되돌릴 수 있습니다.
교체기 방법:
public class PowersOf2
{
static void Main()
{
// Display powers of 2 up to the exponent of 8:
foreach (int i in Power(2, 8))
{
Console.Write("{0} ", i);
}
}
public static System.Collections.Generic.IEnumerable<int> Power(int number, int exponent)
{
int result = 1;
for (int i = 0; i < exponent; i++)
{
result = result * number;
yield return result;
}
}
// Output: 2 4 8 16 32 64 128 256
}
교체기의 get 접근기
public static class GalaxyClass
{
public static void ShowGalaxies()
{
var theGalaxies = new Galaxies();
foreach (Galaxy theGalaxy in theGalaxies.NextGalaxy)
{
Debug.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears.ToString());
}
}
public class Galaxies
{
public System.Collections.Generic.IEnumerable NextGalaxy
{
get
{
yield return new Galaxy { Name = "Tadpole", MegaLightYears = 400 };
yield return new Galaxy { Name = "Pinwheel", MegaLightYears = 25 };
yield return new Galaxy { Name = "Milky Way", MegaLightYears = 0 };
yield return new Galaxy { Name = "Andromeda", MegaLightYears = 3 };
}
}
}
public class Galaxy
{
public String Name { get; set; }
public int MegaLightYears { get; set; }
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.