0

我在 Node.js 中使用 Commander 时遇到了一些问题:parseInt 在我的代码中无法正常工作:

commander = require 'commander'

#parseInt = (str) => parseInt str   #I tried to include this line but not work.

commander
  .option '-n, --connection [n]', 'number of connection', parseInt, 5000
  .option '-m, --message [n]', 'number of messages', parseInt, 5000
  .parse process.argv

console.log commander.connection 
console.log commander.message 

当我使用选项 -n 10000 -m 10000 时,控制台会生成:

NaN
NaN

我还注意到这个代码与课堂作业:

commander = require 'commander'

class MyCommand
  parseOpt: =>
    commander
      .option '-n, --connection [n]', 'number of connection', @parseInt, 5000
      .option '-m, --message [n]', 'number of messages', @parseInt, 5000
      .parse process.argv
    (@connection, @message} = commander
  run: =>
    @parseOpt()
    console.log @connection 
    console.log @message        
  parseInt: (str) => parseInt str

new MyCommand().run()

为什么我的代码在“类”代码工作时不起作用?如何在不使用类的情况下使我的代码工作?谢谢~

4

1 回答 1

1

parseInt需要 2 个参数:要解析的字符串和基数(默认为10)。

commander使用 2 个参数调用提供的函数:要解析的字符串,它是默认值。所以最后你parseInt尝试解析'10000'基数为 5000 的字符串,这是无效的基数。

尝试这个:

commander = require 'commander'

commander
  .option '-n, --connection [n]', 'number of connection', Number, 5000
  .option '-m, --message [n]', 'number of messages', Number, 5000
  .parse process.argv

console.log commander.connection
console.log commander.message

parseInt = (str) => parseInt str此外,您不起作用的原因是您正在定义仅调用自身的递归函数。

于 2018-06-06T20:18:34.117 回答