public function existsOrSet($key, \Closure $fn) : bool
    {
        $key = $this->getCompositeKey($key);
        if (!ArrayHelper::key_exists($this->storage, $key)) {
            if ($fn instanceof \Closure) {
                $value = $fn($this);
                $this->set($key, $value);
            }
            return false;
        }
        return true;
    }