hackpack / hacktions

用hacklang编写的活动库

v1.1.1 2014-05-21 03:03 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:16:40 UTC


README

"hacktions比言语更有说服力"

Hacklang的事件

用法

Hacktions暴露了两个特性

##EventEmitter

标准事件发射器,具有hack类型安全。

class MyEmitter
{
   use EventEmitter;
}

$emitter = new MyEmitter();

//listeners all use variable argument signatures
$lambda = (...) ==> print(func_get_args()[0]); 
$emitter->on('myevent', $lambda);

//trigger fires all registered events with the given name - can take variable arguments
$emitter->trigger('myevent', 'brian');

$emitter->off('myevent', $lambda); //remove a single listener
$emitter->removeListeners(); //remove all listeners
$emitter->removeListeners('myevent') //remove all 'myevent' events

##Subject

Hacktions支持显式的主题/观察者关系

class Cook
{
    //Cook notifies Waiter objects
    use Subject<Waiter>;

    protected Vector<Burger> $cookedBurgers = {};

    public function cook(Burger $burger): void
    {
        $this->cookedBurgers->add($burger);
        $this->notifyObservers();
    }

    //implement methods to work on cooked items...
}

class Waiter implements Observer<Cook>
{
    //Waiter observes a cook
    public function update(Cook $cook, ...): void
    {
        $burger = $cook->orderUp();
        //deliver burger...
    }
}

Subject有以下方法

###registerObserver(T $observer): void

向主题注册新的观察者。

###removeObserver(T $observer): void

从观察者列表中移除指定的对象。

###notifyObservers(...): void

通知所有观察者发生变化,并可选地传递额外数据。

##运行测试

测试使用HackUnit编写。它们可以通过以下方式运行

bin/hackunit Tests/

##hhi 如往常一样,如果需要进行类型检查,请确保将hhi文件复制到项目目录中

cp -r /usr/share/hhvm/hack/hhi /path/to/hacktions