underscore.js の挙動を試そうと node をインタラクティブに起動して以下のように試したところ _
が配列で置き換えられてしまう。
$ node
> var _ = require('underscore');
> _([1,2,3,2,1]).uniq();
[ 1, 2, 3 ]
> _
[ 1, 2, 3 ]
なぜ?どうして? しばらく悩んじゃいました。
あれこれやっているうちに、以下のように console.log() で結果をだすと問題ないことがわかった。
$ node
> var _ = require('underscore');
> console.log(_([1,2,3,2,1]).uniq());
[ 1, 2, 3 ]
> _
{ [Function]
_: [Circular],
VERSION: '1.2.3',
(略)
正解はこれ!
The special variable _ (underscore) contains the result of the last expression.
気づいてしまえばなんてこと無いです。
node の REPL (Read-Eval-Print-Loop) が最後の式の値を自動的に _
に代入するとのこと。
一つ解せないのは expression の評価値が undefined の場合には _ に代入されないこと。 Node v0.4.7 で確認しました。最新版でどうなっているかは知りません。
$ node
> 1
1
> _
1
> undefined
> _
1
まあこの挙動のおかげで console.log()
で _
が置き換えられなかったわけですけどね。