私は CoffeeScript を見てきましたが、このようなコードをどのように書くかわかりません。構文でネストされた匿名関数をどのように処理しますか?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
実際にはコンパイルしませんでしたが、これはうまくいくはずです
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
マットの答えは正しいですが、ここに代替方法があります:
CoffeeScript 1.0(この質問が提起されてから数週間後にリリースされました)では、直後に続く関数を実行するdo
演算子が導入されました。それは主にループ内の変数をキャプチャするために使用されます。
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(x
への参照を無名関数に渡す)の動作は
for x in arr
setTimeout (-> console.log x), 50
後者はarr
が1つしかないため、x
の最後のエントリを繰り返し出力するだけです。
とにかく、引数の受け渡しに関する機能は現在少し制限されていますが、余分な括弧なしで無名関数を実行する方法としてdo
に注意する必要があります。 それらを広げる提案 を提起しました。
現在、あなたのコード例と同等のものは
do ->
$ = jQuery
...
私の提案が受け入れられれば、書くことが可能になります
do ($ = jQuery) ->
...
代わりに。
ショートバリアント
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()