2011-10-07 3 views
3

В JavaScript можно было бы определить закрытую переменную, сделав его локальную переменную в функцию, которая возвращает замыкание:Использование закрытия для частных переменных в CoffeeScript

var count = (function(){ 
    var i = 0; 
    return function(){ return i++; } 
})(); 

Это предполагает определить-функция-затем call-it идиома, которая довольно распространена в JavaScript, но я не знаю, как это переводится в CoffeeScript. Есть идеи?

ответ

3

Вы можете использовать ключевое слово do

count = do -> 
    i = 0 
    -> i++ 
+0

Работает даже без «делать», работающий один лайнер будет 'Count = -> я = 0; -> i ++ ' –

+0

@JacobOscarson Нет, это не так ... Если вы не выполняете' do' и вызываете 'count()', он возвращает функцию. Если вы включаете 'do' и вызываете' count() ', он возвращает целое число. –

+0

Ах, да, я думал, что ему нужен генератор счетчиков. –

2

Как сказал Брайан, то ключевое слово do лучше. Вы также можете использовать скобки, так же, как и в JavaScript:

count = (-> 
    i = 0 
    -> i++ 
)() 
Смежные вопросы