万年素人からHackerへの道

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

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のリストの便利なテクを紹介すると思います。