2016-09-27 55 views
0

当我用--l = 4和--w = 4运行solve-3时,函数rectangle.perimeter和rectangle.area输出NaN。为什么? 对我来说,似乎输入的整数正在转换为字符串,因此我添加了Number(),但这并没有改变任何东西。node.js(yargs)数字是作为字符串输入的吗?

文件1:RECT-2.js

module.exports = function(l,w,callback) { 
try { 
    if (l < 0 || w < 0) { 
     throw new Error("Rectangle dimensions should be greater than zero: l = " + l + ", and w = " + w); 
    } 
    else 
     callback(null, { 
      perimeter: function(l,w) { 
       return (2*(l+w)); 
      }, 
      area: function(l,w) { 
       return (l*w); 
      } 
    }); 
} 
catch (error) { 
    callback(error,null); 
} 
} 

文件2:解决-3.js

var argv = require('yargs') 
.usage('Usage: node $0 --l=[number] --w=[number]') 
.demand(['l','w']) 
.argv; 


var rect = require('./rect-2'); 

function solveRect(l,w) { 
    console.log("Solving for rectangle with length: " + l + " and  width: " + w); 

rect(l,w, function(err,rectangle) { 
    if (err) { 
     console.log(err); 
    } 
    else { 
     console.log("The area of a rectangle with length = "+l+" and width = "+w+" is "+rectangle.area()); 
     console.log("The perimeter of a rectangle with length = "+l+" and width = "+w+" is "+rectangle.perimeter()); 
    } 
    }); 
}; 

solveRect(Number(argv.l),Number(argv.w)); 
+0

你应该使用' parseInt()'或'parseFloat()'将字符串转换为数字。 – generalhenry

回答

0

看看这个功能您已经定义:

perimeter: function(l,w) { 
    return (2*(l+w)); 
}, 

你期望这个函数有两个参数。

然后不带参数调用它:

rectangle.perimeter() 

你定义的阴影在矩形-2文件的上部范围的那些论据。简单的解决方法就是删除函数参数:

perimeter: function() { 
    return (2*(l+w)); 
}, 
area: function() { 
    return (l*w); 
} 

现在这两个功能被说成“关闭了”存在于上范围lw变量。

虽然​​包裹的字符串将在此情况下,技术上的工作,注意yargs允许您指定命令行类型的用户输入的值,如.number()语法:

var argv = require('yargs') 
    .number(['l','w']) 
    .demand(['l','w']) 
+0

谢谢!这工作! –

+0

如果有人回答了您的问题,请单击答案旁边的复选标记以将其标记为正确。 –