有人可以帮我解决这个语法问题吗?
Can someone help me with this syntax?
这可能很愚蠢,但我不熟悉这里的语法:
var stdin = '';
process.stdin.on('data', function (chunk) {
stdin += chunk;
}).on('end', function() {
var lines = stdin.split('\n');
for(var i=0; i<lines.length; i++) {
process.stdout.write(lines[i]);
}
});
我应该写一个计算平方数的程序,我知道该怎么做,但我从未遇到过这种类型的结构。我理解循环,process.stdout.write
本质上是 console.log
测试用例输入是 5 和 25。输出应该是 25 和 625。
我应该在哪里编写代码来执行此操作?
你可以把它放在一个文件里 sample.js
和 运行 它:
node sample.js
这个process.stdin
指的是stdin流(来自其他应用程序的传入数据,例如shell输入,所以基本上是这样的:
process.stdin.on('data', function (chunk) {
stdin += chunk;
})
说,每当有新的 data
(用户在控制台中输入内容,托管应用程序发送一些数据)时,读取它并将其存储在 stdin
变量中。然后,当 stdin
流结束时(例如,用户完成输入数据):
.on('end', function() {
var lines = stdin.split('\n');
for(var i=0; i<lines.length; i++) {
process.stdout.write(lines[i]);
}
})
代码输出回用户输入的内容。
似乎所有的基础设施都在那里。剩下的就是对你的数字求平方。
process.stdin
和 process.stdout
是 node streams,它们是异步的,因此使用事件来告诉您它们发生了什么。 data
是当有数据准备好处理时的事件,end
是当没有更多数据时的事件。代码只是 snarfs process.stdin
然后,一旦数据全部在内存中,就对其进行处理。
end
匿名函数可能最好这样实现:
function() {
stdin.split('\n').foreach(function(line){
var value = line.trim()|0;
process.stdout.write(value * value);
});
}
题外话:通过在流传入时对其进行处理而不是收集它然后一次处理所有流,可能会改善内存占用。这取决于输入和输入缓冲区的大小:
var buffer = '';
var outputSquare = function(line) {
var value = line.trim()|0;
process.stdout.write(value * value);
};
process.stdin.on('data', function (chunk) {
var lines = (buffer + chunk).split('\n');
buffer = lines.pop();
lines.foreach(outputSquare);
}).on('end', function() {
outputSquare(buffer);
});
这可能很愚蠢,但我不熟悉这里的语法:
var stdin = '';
process.stdin.on('data', function (chunk) {
stdin += chunk;
}).on('end', function() {
var lines = stdin.split('\n');
for(var i=0; i<lines.length; i++) {
process.stdout.write(lines[i]);
}
});
我应该写一个计算平方数的程序,我知道该怎么做,但我从未遇到过这种类型的结构。我理解循环,process.stdout.write
本质上是 console.log
测试用例输入是 5 和 25。输出应该是 25 和 625。
我应该在哪里编写代码来执行此操作?
你可以把它放在一个文件里 sample.js
和 运行 它:
node sample.js
这个process.stdin
指的是stdin流(来自其他应用程序的传入数据,例如shell输入,所以基本上是这样的:
process.stdin.on('data', function (chunk) {
stdin += chunk;
})
说,每当有新的 data
(用户在控制台中输入内容,托管应用程序发送一些数据)时,读取它并将其存储在 stdin
变量中。然后,当 stdin
流结束时(例如,用户完成输入数据):
.on('end', function() {
var lines = stdin.split('\n');
for(var i=0; i<lines.length; i++) {
process.stdout.write(lines[i]);
}
})
代码输出回用户输入的内容。
似乎所有的基础设施都在那里。剩下的就是对你的数字求平方。
process.stdin
和 process.stdout
是 node streams,它们是异步的,因此使用事件来告诉您它们发生了什么。 data
是当有数据准备好处理时的事件,end
是当没有更多数据时的事件。代码只是 snarfs process.stdin
然后,一旦数据全部在内存中,就对其进行处理。
end
匿名函数可能最好这样实现:
function() {
stdin.split('\n').foreach(function(line){
var value = line.trim()|0;
process.stdout.write(value * value);
});
}
题外话:通过在流传入时对其进行处理而不是收集它然后一次处理所有流,可能会改善内存占用。这取决于输入和输入缓冲区的大小:
var buffer = '';
var outputSquare = function(line) {
var value = line.trim()|0;
process.stdout.write(value * value);
};
process.stdin.on('data', function (chunk) {
var lines = (buffer + chunk).split('\n');
buffer = lines.pop();
lines.foreach(outputSquare);
}).on('end', function() {
outputSquare(buffer);
});