2013-10-04 8 views
5

Wydaje się, że node.js (wersja v0.10.13) zwraca polecenie owinięty między ( i \n), oto przykład minimalny:node.js REPL zabawny zwyczaj zachowanie z funkcją eval

require('repl').start({ 
    'eval': function (cmd, context, filename, callback) { 
     callback(null, cmd); 
    } 
}); 

Zachowanie jest następujące:

$ node repl.js 
> asd 
'(asd\n)' 
> 

Dlaczego tak jest? Jeśli ta funkcja jest documented wtedy nie byłem w stanie go znaleźć.

Ponadto, jeśli jest to zamierzone działanie, czy istnieje lepsze rozwiązanie niż wykonanie cmd = cmd.slice(1, -2);?

Odpowiedz

1

Problem został już naprawiony (patrz commit 9ef9a9de z sierpnia 2013). Teraz tylko wyrażenie JSON jest zawijane w pareny.

+0

Naprawiono w wersji niestabilnej. – cYrus

0

Jako obejście można przechwycić strumień stdin jako zmienną i użyć go zamiast tego. Myślę, że węzeł robi to, ponieważ dane wejściowe użytkownika powinny być wyrażeniem js, które dobrze jest zapakować w zamknięciu ().

var buffer = ''; 

process.stdin.on('data', function(chunk) { 
    buffer += chunk.toString('utf8'); 
}); 

require('repl').start({ 
    input: process.stdin, 
    output: process.stdout, 
    'eval': function (cmd, context, filename, callback) { 
     console.log(buffer); 
     buffer = ''; 
     callback(null, true); 
    } 
});