Не понимает, как Javascript работает в этом коде (используя Coffeescript, Commander в Node.js) - PullRequest
0 голосов
/ 14 мая 2018

У меня возникли проблемы с использованием Commander в Node.js: 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()

Почему мой код не работает, пока работает код «класса»?Как заставить мой код работать без использования класса?Благодаря ~

1 Ответ

0 голосов
/ 06 июня 2018

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 не работает, вы определяете рекурсивную функцию, которая просто вызывает себя.

...