Skip to content

Instantly share code, notes, and snippets.

@onionmk2
Last active December 13, 2016 15:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onionmk2/234648def54d462c4c8cd522f82d41ac to your computer and use it in GitHub Desktop.
Save onionmk2/234648def54d462c4c8cd522f82d41ac to your computer and use it in GitHub Desktop.
function* noNextArgNoSelfArg(){
var localVar = 'a';
var FirstYieldRetval = yield localVar;
localVar = 'b';
var SecondYieldRetval = yield localVar;
console.log('noNextArgNoSelfArg', {localVar})
}
function* noNextArgSelfArg(selfArg){
var localVar = 'a';
var FirstYieldRetval = yield localVar;
localVar = 'b';
var SecondYieldRetval = yield localVar;
console.log('noNextArgSelfArg', {selfArg, localVar})
}
function* NextArgNoSelfArg(){
var localVar = 'a';
var FirstYieldRetval = yield localVar;
localVar = 'b';
var SecondYieldRetval = yield localVar;
var YieldRetvals = {
FirstYieldRetval,
SecondYieldRetval
}
console.log('NextArgNoSelfArg', {localVar, YieldRetvals});
}
function* NextArgSelfArg(selfArg){
var localVar = 'a';
var FirstYieldRetval = yield localVar;
localVar = 'b';
var SecondYieldRetval = yield localVar;
var YieldRetvals = {
FirstYieldRetval,
SecondYieldRetval
}
console.log('NextArgSelfArg', {selfArg ,localVar, YieldRetvals})
}
class GeneratorExecuter {
constructor(generatorFunction, generatorFunctionArg, initialNextArg) {
this.generatorObject = generatorFunction(generatorFunctionArg);
this.initialNextArg = initialNextArg;
}
execute() {
let i = 0;
while(true) {
const retVal = this.generatorObject.next(this.initialNextArg + i);
const done = retVal.done;
if(done) {
console.log('---------------');
break;
}
i ++;
}
}
}
console.log('*********** ***********');
[
new GeneratorExecuter(noNextArgNoSelfArg, 1, 0),
new GeneratorExecuter(noNextArgSelfArg, 1, 0),
new GeneratorExecuter(NextArgNoSelfArg, 1, 0),
new GeneratorExecuter(NextArgSelfArg, 1, 0)
].forEach((executer) => executer.execute());
console.log('*********** ***********');
[
new GeneratorExecuter(noNextArgNoSelfArg, 1),
new GeneratorExecuter(noNextArgSelfArg, 1),
new GeneratorExecuter(NextArgNoSelfArg, 1),
new GeneratorExecuter(NextArgSelfArg, 1)
].forEach((executer) => executer.execute());
/*
*********** ***********
noNextArgNoSelfArg { localVar: 'b' }
---------------
noNextArgSelfArg { selfArg: 1, localVar: 'b' }
---------------
NextArgNoSelfArg { localVar: 'b',
YieldRetvals: { FirstYieldRetval: 1, SecondYieldRetval: 2 } }
---------------
NextArgSelfArg { selfArg: 1,
localVar: 'b',
YieldRetvals: { FirstYieldRetval: 1, SecondYieldRetval: 2 } }
---------------
*********** ***********
noNextArgNoSelfArg { localVar: 'b' }
---------------
noNextArgSelfArg { selfArg: 1, localVar: 'b' }
---------------
NextArgNoSelfArg { localVar: 'b',
YieldRetvals: { FirstYieldRetval: NaN, SecondYieldRetval: NaN } }
---------------
NextArgSelfArg { selfArg: 1,
localVar: 'b',
YieldRetvals: { FirstYieldRetval: NaN, SecondYieldRetval: NaN } }
*/
@onionmk2
Copy link
Author

generatorObj = generatorFunction(x)
generatorObj.next (y)

xは、yield式と関係しない。
yは、yield式と関係する。yが直前の yield式の結果として扱われる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment