为什么节点只打印出文件中的内容?

时间:2019-01-05 15:19:29

标签: javascript node.js

我在使用node.js时遇到问题,我不太熟悉。

我有一个JavaScript文件,需要使用.load "filename.js"将其加载到node.js中。

当我运行命令时,我只是从文件中的代码中打印出来。

这是我要加载的文件的代码。我已向我建议了更改。但我仍然无法获得完整的代码。

class ArithmeticTaskRunner 
{
  constructor()
  {
    this.tasks = [];
  }
  addNegationTask()
  {
    const negationTask = (x) => -x;
    this.tasks.push(negationTask)
    return this;
  }
  addAdditionTask(y)
  {
    const additionByY = (x) => x + y;
    this.tasks.push(additionByY)
    return this;
  }
  addMultiplicationTask(y)
  {
    const multiplyByY = (x) => x * y;
    this.tasks.push(multiplyByY)
    return this;
  }
  taskCount()
  {
    return this.tasks.length;
  }
  execute(n)
  {
    let currentResult = n;
    for(let task of this.tasks)
    {
        currentResult = task(currentResult)
    }
    return currentResult;
  }
}
let taskRunner = new ArithmeticTaskRunner()
taskRunner.addAdditionTask(10)
taskRunner.addNegationTask()
taskRunner.addMultiplicationTask() 
taskRunner.execute(2)

这是此任务所需的输出和输入的示例

1。

  

让taskRunner = new ArithmeticTaskRunner()       未定义   taskRunner.addAdditionTask(2)       未定义   taskRunner.addMultiplicationTask(4)       未定义   taskRunner.addAdditionTask(10)       未定义   taskRunner.execute(2)       26   taskRunner.execute(-2)       10

2。

  

taskRunner.execute()       -5   taskRunner.execute(10)       -10   taskRunner.taskCount       3

2 个答案:

答案 0 :(得分:2)

如果要进行REPL会话并在命令行中运行命令,可以使用repl模块。

const repl = require('repl');

class ArithmeticTaskRunner {
  ... // Your class definition
}

// This starts the REPL session with the ArithmeticTaskRunner defined
repl.start().context.ArithmeticTaskRunner = ArithmeticTaskRunner;

然后在终端机中

node filename.js

当节点正在运行时:

let taskRunner = new ArithmeticTaskRunner()
taskRunner.addAdditionTask(2)
taskRunner.addMultiplicationTask(4)
taskRunner.addAdditionTask(10)
taskRunner.execute(2)
taskRunner.execute(-2)

如果要完全运行代码并输出结果,请在代码中使用console.log并运行node filename.js

class ArithmeticTaskRunner {
  ... // Your class definition
}

let taskRunner = new ArithmeticTaskRunner()
taskRunner.addAdditionTask(2)
taskRunner.addMultiplicationTask(4)
taskRunner.addAdditionTask(10)

console.log(taskRunner.execute(2))
console.log(taskRunner.execute(-2))

在终端中:

node filename.js

答案 1 :(得分:1)

我假设您基本上已经在命令行上完成了以下操作:

node
.load ArithmeticTaskRunner.js

之所以只看到打印出来的代码,是因为您只有一个类定义。您没有TaskRunner的实例。如果这是您的意图,请在代码底部添加以下内容:

const taskRunner = new TaskRunner();
console.log(taskRunner);

然后,当您再次尝试这些命令行步骤时,它将打印出TaskRunner的实例及其上的方法。

但是,.load命令的全部目的是将您的脚本放入Node.js REPL中。另外,您也可以在命令行中执行以下操作:

node
.load ArithmeticTaskRunner.js
const taskRunner = new TaskRunner();
console.log(taskRunner);

这将使您可以在命令行上进行工作,而无需将其硬编码到脚本中。

更新

如果您打算在不打印代码的情况下执行代码,则可以执行以下操作:

node ArithmeticTaskRunner.js

但是您不会将代码提供给全局实例。您必须像在我最初所做的那样,将代码添加到创建'TaskRunner'实例并加以利用的脚本中,并将其保存到该文件中。

class ArithmeticTaskRunner 
{
    constructor()
    {
      this.tasks = [];
    }
    addNegationTask()
    {
      const negationTask = (x) => -x;
      this.tasks.push(negationTask)
      return this;
    }
    addAdditionTask(y)
    {
      const additionByY = (x) => x + y;
      this.tasks.push(additionByY)
      return this;
    }
    addMultiplicationTask(y)
    {
        const multiplyByY = (x) => x * y;
        this.tasks.push(multiplyByY)
        return this;
    }
    taskCount()
    {
      return this.tasks.length;
    }
    execute(n)
    {
        let currentResult = n;
        for(let task of this.tasks)
        {
            currentResult = task(currentResult)
        }
        return currentResult;
    }
}
const arithmeticTaskRunner = new ArithmeticTaskRunner ();
console.log(arithmeticTaskRunner );

之后,请尝试在命令行上执行以下步骤:

node
.load ArithmeticTaskRunner.js

更新2

这将打开Node REPL(出现“>”前导)。然后,一次一行地执行以下命令:

let taskRunner = new ArithmeticTaskRunner()
taskRunner.addAdditionTask(2)
taskRunner.addMultiplicationTask(4)
taskRunner.addAdditionTask(10)
taskRunner.execute(2)

这应该打印26。

taskRunner.execute(-2)

这应该打印10。