読者です 読者をやめる 読者になる 読者になる

LiveScript でつまずいたこと

LiveScript

関数呼び出し中の do

hoge-func ham, tomato, beacon do
  a: \foo
  b: \bar

が:

hogeFunc( ham, tomato, beacon, { a: 'foo', b: 'bar' } );

になって欲しいのだが、時々こういう風になる:

hogeFunc( ham, tomato, beacon({ a: 'foo', b: 'bar' }) );

うん、beacon はただの変数で、関数じゃねーよwwwwww
もうやだこの altJS…………。
地雷だよね………(´Д⊂グスン

これは、do を使う前の引数が変数だとなるらしい。

なので、今までやっていた通り:

hoge-func ham, tomato, beacon,
  a: \foo
  b: \bar

こんな風に書くことにする。

変数?方式の関数定義は上の方に変数がいっぱい溜まるし、普通に書きたいよー

こーいうのは:

apply-options = (options) !->
  heating-power            := options.power
  number-of-people-of-cook := options.number_of_people

こんな風に書ける:

!function apply-options (options)
  heating-power            := options.power
  number-of-people-of-cook := options.number_of_people

関数を渡す関数内で呼び出し元の this を使いたい

これは私のじゃっばすくりぷよぢからが 1200 万パワーに満たないために発生したことなんだけど:

class Cook
  (@skillet) ->
    
  cook: (foods) !->
    foods.for-each (food) !->
      # skillet は Cook インスタンスのものだが、このコンテキスト(for-each に渡された関数)においては
      # @skillet はないため、あぼーんする
      @skillet.push food

こういうことをやっていたために、実行すると激しくあぼーんしたり、挙動がおかしくなっていた。
LiveScript の公式サイトを目を皿のようにして眺めたところ、~> を使うと (・∀・)イイ!! らしいことがわかったので、このように変えた:

    
  cook: (foods) !->
    # 見づらいと思うけど、矢印(`->')の横棒(`-')をチルダ(`~')にすると(`~>')、
    # lsc がうまく計らってくれる。
    foods.for-each (food) !~>
      @skillet.push food
``