【问题标题】:Can someone help me with this syntax?有人可以帮助我使用这种语法吗?
【发布时间】:2017-01-09 18:54:37
【问题描述】:

这可能很愚蠢,但我不熟悉这里的语法:

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。

我应该在哪里编写代码来执行此操作?

【问题讨论】:

  • 您有两个不相关的问题。一个关于如何编写一个数字平方的程序,以及语法/结构是什么......
  • 你可以从这里开始:nodejs.org/api
  • @y-intercept 我刚刚遇到了这个确切的问题,你能告诉我你把代码放在哪里了吗?

标签: javascript node.js stdin


【解决方案1】:

你可以把它放在一个文件sample.js中并运行它:

node sample.js

process.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]);
  }
})

代码输出用户输入的内容。

【讨论】:

  • @y-intercept 如果您看到任何您喜欢的答案,请随时点赞。如果其中一个答案最能解决您的问题,请随时将其标记为已接受。
  • @Ouroborus,他还不能投票,他还需要 1 分,我投票了这个问题,你也可以投票 :)
【解决方案2】:

似乎所有的基础设施都在那里。剩下的实际上就是将您的数字平方。

process.stdin 和 process.stdout 是 node streams,它们是异步的,因此使用事件来告诉您它们发生了什么。 data 是当有数据准备好处理时的事件,end 是当没有更多数据时的事件。代码只是捕获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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多