2016-12-02 14 views
1

私自身のコマンドラインを構築していて、NodeJSで通常定義されている変数にアクセスしたり、変数を変更したりしたいとします。私はcmd[1]と呼ばれる別の変数で定義された変数の名前を持っています。適切な時間をかけて研究した結果、定義されたすべての変数を保持するグローバルオブジェクトは存在しないという結論に達しました。別の変数に記述されている変数のデータを返すにはどうすればよいですか?ここに、達成しようとしていることを説明する小さなコードブロックがあります。変数に動的にアクセスする

var readline = require('readline'); 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    prompt: 'CMD> ' 
}); 

rl.prompt(); 

rl.on('line', (line) => { 
    var commandl = line.trim(); 
    var cmd = commandl.split(' '); 

    switch(cmd[0]) { 
    case 'vr': 
     //here i'd like to log the variable which name is in cmd[1]. if there was a global object i would assume i could just global[cmd[1]]. 
     break; 
    case 'spit': 
     //here i'd like to log an object with every defined variables and its live changes 
     break; 
    default: 
     console.log(`${line.trim()}: command not found`); 
     break; 
    } 
    rl.prompt(); 
}).on('close',() => { 
    process.exit(0); 
}); 

解決策が必要です。

答えて

0

@Waseem I.はこれがREPLでのみ機能することを指摘しています。


私は後世のためにここに保管しています。 Node.jsので


windowに相当globalあります。たとえば、次のように

> var a = 2; 
> global.a // == 2 

これは(上記見られるように)あなたが定義したもの(システムprocessのようなものを含む)すべてのグローバル変数が含まれています。

+0

これはスクリプトには適用されませんが、REPLのみに適用されます。 – Monstrum

+0

Hrm。それは奇妙なことです、私は前に使用したと思っていたでしょう(私はちょうど今それをテストした、それは動作しません) – MayorMonty

+0

私は 'var'('変数= 123')なしで変数を定義すると、グローバル( 'global ['variable']')ではありますが、私はどれくらい信頼できるのか、 'var'とはどう違うのでしょうか。 – Monstrum

0

storeを作成して使用できないのはなぜですか?

store.js

// store.js 
module.exports = {} 

がapp.js

// app.js 
var store = require('./store'); 
var readline = require('readline'); 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    prompt: 'CMD> ' 
}); 

rl.prompt(); 

rl.on('line', (line) => { 
    var commandl = line.trim(); 
    var cmd = commandl.split(' '); 

    switch(cmd[0]) { 
    case 'vr': 
     store.vr = cmd[1]; 
     //here i'd like to log the variable which name is in cmd[1]. if there was a global object i would assume i could just global[cmd[1]]. 
     break; 
    case 'spit': 
     store.spit = '...';' 
     break; 
    default: 
     console.log(`${line.trim()}: command not found`); 
     break; 
    } 
    rl.prompt(); 
}).on('close',() => { 
    process.exit(0); 
}); 

other.js

// other.js 
var store = require('./store'); 

console.log(store.vr); 

あなたはを使用することができますががありますが、テスト目的で簡単に店舗を模擬することができるため、この方法をお勧めします。

+0

私は変数を格納しようとしているわけではありませんが、もし私がそれをしたいのであれば、単に 'global'を使うことができます。それは私の自然なコーディング習慣と私が巨大なプロジェクトのためにやってくれるものではないことに干渉します。いずれにせよ、これが不可能なら私はする必要があります。 – Monstrum

関連する問題