2012-02-15 70 views
0

請考慮下面的代碼。如果我宣佈exports領域如下:分配給未申報的變量

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

它被編譯成:

var exports; 

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

但正如你可能已經知道我需要的出口領域仍然未申報。換句話說,我需要以某種方式通知編譯器不要產生var exports;聲明。 我知道我可以解決這個破解這樣的:

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

但是這只是混亂和非常似乎是一個缺陷,因爲CoffeeScript的本質是減少代碼的噪音。

有沒有一種方法或更好的破解?

回答

0

我想到一個解決這個有點多聰明的黑客,這是偶然套裝在export需求好得多,因爲它不會刪除先前分配的出口領域:

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

但仍然是一個黑客,它僅適用於分配網絡未申報對象的領域。如何分配未聲明的變量仍然是一個問題。

-1

我假設你「需要導出字段保持未聲明」,因爲你正在編寫一個Node.js模塊exports已經聲明,是嗎?在這種情況下,這個問題和它的最多的回答應該很長的路要走,旨在幫助您:How do I define global variables in CoffeeScript?

總之,你會做這樣的事情:

root = exports ? this 

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

希望幫助!

+0

感謝您的鏈接,但您的建議是錯誤的,因爲您只是重新分配第二個語句中的「root」值。即,首先將'root'分配給'出口?這個',然後你將它重新分配給具有函數的對象。 – 2012-02-15 22:12:21

+0

嗯,你是對的。 – 2012-02-15 22:18:13

2

我不認爲你可以直接指定導出(在nodejs中)。我覺得你的代碼應該是

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

在這種情況下,CS將承擔模塊已經確定,並簡單地輸出

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

這是正確的。 'exports'是一個具有模塊範圍的變量,用作對'module.exports'的引用。編寫'exports = ...'不會影響'module.exports'。這是一個容易犯的錯誤。 – 2012-02-17 21:54:05