Rx\Operator\DistinctOperator::__invoke PHP Method

__invoke() public method

public __invoke ( Rx\ObservableInterface $observable, Rx\ObserverInterface $observer, Rx\SchedulerInterface $scheduler = null ) : Rx\DisposableInterface
$observable Rx\ObservableInterface
$observer Rx\ObserverInterface
$scheduler Rx\SchedulerInterface
return Rx\DisposableInterface
    public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
    {
        $values = [];
        $callbackObserver = new CallbackObserver(function ($value) use($observer, &$values) {
            try {
                $key = $this->keySelector ? call_user_func($this->keySelector, $value) : $value;
                foreach ($values as $v) {
                    $comparerEquals = call_user_func($this->comparer, $key, $v);
                    if ($comparerEquals) {
                        return;
                    }
                }
                $values[] = $key;
                $observer->onNext($value);
            } catch (\Exception $e) {
                return $observer->onError($e);
            }
        }, [$observer, 'onError'], [$observer, 'onCompleted']);
        return $observable->subscribe($callbackObserver, $scheduler);
    }
DistinctOperator