Присвоение необъявленной переменной - PullRequest
0 голосов
/ 16 февраля 2012

Пожалуйста, рассмотрите следующий код.Если я объявлю поле exports следующим образом:

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

Оно будет скомпилировано в:

var exports;

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

Но, как вы, вероятно, уже знаете, мне нужно, чтобы поле экспорта оставалось необъявленным.Другими словами, мне нужно как-то сообщить компилятору, чтобы он не выдавал оператор var exports;.Я знаю, что могу взломать это так:

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

, но это просто грязно и очень похоже на дефект, поскольку сущность CoffeeScript заключается в уменьшении шума кода.

Есть ли способ или лучше взломать это?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Я не думаю, что вы можете назначить напрямую для экспорта (в nodejs). Я думаю, что ваш код должен быть

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

, в этом случае CS будет считать, что модуль уже определен, и будет просто выводить

module.exports = {
  someFunc: function() {},
  someOtherFunc: function() {}
};
0 голосов
/ 16 февраля 2012

Я подумал об одном более умном хакерском подходе, который, случайно, удовлетворяет потребности export, намного лучше, поскольку не стирает ранее назначенные поля экспорта:

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

Но все жеэто хак, и он работает только для присвоения полей необъявленным объектам.Как назначить необъявленную переменную, остается вопросом.

0 голосов
/ 16 февраля 2012

Я предполагаю, что вам "нужно, чтобы поле экспорта оставалось необъявленным", потому что вы пишете модуль Node.js. exports уже объявлено, да?В этом случае этот вопрос и его главный ответ должны помочь вам: Как определить глобальные переменные в CoffeeScript?

Короче, вы сделаете что-то вроде этого:

root = exports ? this

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...