Torus Solutions 改

Ello 2018-04-06T20:44:05.200Z

Node.js で標準入力を簡単に扱うには、ジェネレータを使ってこんな風に書けばいいみたい。

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

var gen = main()
gen.next()
rl.on('line', (line) => {
  gen.next(line)
});

function *main() {
  while (true) {
    var line = yield
    console.log('gen Received:', line)
  }
}

ジェネレータで yield を経由して外から値が渡せるの知らなかった。yield は普通の関数からは使えない、つまり、ジェネレータから呼び出される関数内から yield することは出来ないので不便だと思ってたけど、関数の呼び出しの関係をひっくり返せばいいので、そこまで不自由ではなかった。

リファレンス:[function* - JavaScript MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function*)