万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Boo Language Advent Calendar 2012 21日目 Title:「関数の受け渡し」

    URL: http://atnd.org/events/34622

    関数の引渡しがUnityScriptは楽だったが、Booではどうやるか調べた。
    僕はUnityScriptが嫌いですが皮肉にもUnityScriptについては当ブログが情報量多いし一番わかり易いですねw(自画自賛乙)

    参考にした
    URL: http://stackoverflow.com/questions/275704/lambdas-in-boo

    ではMain Cameraにアタッチする2つのスクリプト書いてみたよ。
    ※ちなみに今後はautopep8で整形して、クラス名と(の間のスペースをきちんと取り除いてからBooコード載せます。

    ・FuncTestSender.boo (以後センダーと呼ばせて)
    こっちが関数送るよ

    import UnityEngine
    
    
    class FuncTestSender(MonoBehaviour):
    
        def Start():
            rcvr = GetComponent[of FuncTestReciever]()
            rcvr.Func = {x | Debug.Log(x + 2)}
    
        def Update():
            pass
    

    ・FuncTestReciever.boo (以後レシーバと呼ばせて)
    ※こっちが関数を_func変数で受けるよ

    import UnityEngine
    
    
    class FuncTestReciever(MonoBehaviour):
    
        [Property(Func)]
        private _func as callable(int)
    
        def Update():
            if(_func):
                _func(1)
    

    UnitySctiptの方が読みやすいかもしれないが、それは慣れていないだけと信じたい。

    解説すると、センダーの↓はxという引数をもらって、Debug.Log(x + 2)という結果を返すよってこと。

    {x | Debug.Log(x + 2)}
    

    レシーバの

    _func as callable(int)
    

    で、「引数が"int'で、返り値"void"の関数」を変数として使えるってこと。

    しかし、↓の書き方も許容した(@_@;)

    _func as callable(int) as string
    

    ↓これが実際の関数の実行部分です。引数1を受け取りますってことです。

            if(_func):
                _func(1)
    

    分かりましたでしょうか?
    分からなかったらコメントとかTwitterで聞けば説明します。

    では次の方!