30

私はCoffeeScriptを見てきましたが、このようなコードをどのように書くのかわかりません。ネストされた無名関数を構文でどのように処理しますか?

;(function($) {
          var app = $.sammy(function() {

            this.get('#/', function() {
              $('#main').text('');
            });

            this.get('#/test', function() {
              $('#main').text('Hello World');
            });

          });

          $(function() {
            app.run()
          });
        })(jQuery);
4

3 に答える 3

44

実際にはコンパイルしませんでしたが、これは機能するはずです

(($) ->
  app = $.sammy ->

    this.get '#/', ->
      $('#main').text '' 

    this.get '#/test', ->
      $('#main').text 'Hello World'

  $(->
    app.run()
  )
)(jQuery);
于 2010-11-12T16:03:48.780 に答える
35

マットの答えは正しいですが、別の方法があります。

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) ->
  ...

代わりは。

于 2011-03-06T02:54:45.250 に答える
4

短いバリアント

do ($=jQuery)->
 app = $.sammy ->
   @get '#/', -> $("#main").text ''
   @get '#/test', -> $('#main').text 'Hello world'
 $ -> app.run()
于 2013-02-06T11:21:01.737 に答える