万年素人からHackerへの道

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

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

    Boo Language Advent Calendar 2012 6日目 Title:「delegate & ラムダ」

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

    delegateラムダ式の組み合わせをしたいです。
    地球上に唯一存在しているこのBoo本から引用

    まずC#で紹介します

    ・LambdaTestCS.cs
    → これをCubeとかにアタッチしておきます。
     OnMouseOverというMonoBehaviourのメソッドがUnityが用意してくれるので、
     マウスをCubeに重ねるとイベントが発生し、Cube is Clikedと表示されるはずです。

    using UnityEngine;
    
    public class LambdaTestCS : MonoBehaviour
    {
        public delegate void EventHandler (GameObject e, string a);
    
        public event EventHandler MouseOver;
    
        void Awake()
        {
            // add
            MouseOver += (e, a) => Debug.Log(e.name + " is " + a);
        }
    
        void OnMouseOver ()
        {
    
            if (MouseOver != null)
                MouseOver (this.gameObject, "Clicked");
        }
    }
    

    これをBooで置き換えます。
    ・LambdaTestBoo.boo

    import UnityEngine
    
    class LambdaTestBoo (MonoBehaviour):
    
        public callable EventHandler (e as GameObject, a as string)
        public event MouseOver as EventHandler
    
        def Awake ():
            // add
            MouseOver += { e, a | Debug.Log(e.name + " is " + a) }
    
        def OnMouseOver ():
            if MouseOver != null:
                MouseOver (self.gameObject, "Clicked")
    

    delegateがcallableになっても文字数節約できない(8文字->8文字)し、
    唯一得するのは引数を使用しなければ”省略できる”点かな?C#もだっけ?

    MouseOver += { Debug.Log("Clicked") }

    次の方よろしくです。
    次はBooのリストの便利なテクを紹介すると思います。