分配给未声明的变量

时间:2012-02-15 21:40:10

标签: coffeescript

请考虑以下代码。如果我声明exports字段如下:

exports = 
  someFunc : -> # blablabla
  someOtherFunc : ->

它被编译成:

var exports;

exports = {
  someFunc: function() {},
  someOtherFunc: function() {}
};

但是你可能已经知道我需要出口字段保持未申报。换句话说,我需要以某种方式告知编译器不要生成var exports;语句。 我知道我可以这样破解:

exports.someFunc = ->
exports.someOtherFunc = ->

但这只是一个混乱而且看起来很像缺陷,因为CoffeeScript的本质是减少代码噪音。

有没有方法或更好的黑客围绕这个?

3 个答案:

答案 0 :(得分:2)

我认为您不能直接分配到导出(在nodejs中)。我认为你的代码应该是

module.exports = 
  someFunc : -> # blablabla
  someOtherFunc : ->

在这种情况下,CS将假定模块已经定义并且将只输出

module.exports = {
  someFunc: function() {},
  someOtherFunc: function() {}
};

答案 1 :(得分:0)

我想到了一个更巧妙的黑客攻击,这意外地适合export需要更好,因为它不会删除先前分配的导出字段:

exports[k] = v for k, v of {
  someFunc : ->
  someOtherFunc : ->
}

但它仍然是一个黑客,它只适用于分配未声明对象的字段。如何分配未声明的变量仍然是一个问题。

答案 2 :(得分:-1)

我假设您“需要导出字段保持未声明”,因为您正在编写Node.js模块exports已经声明,是吗?在这种情况下,这个问题及其最佳答案应该在很大程度上帮助您:How do I define global variables in CoffeeScript?

简而言之,你会做这样的事情:

root = exports ? this

root = 
  someFunc      : -> # blablabla
  someOtherFunc : ->

希望有所帮助!