protected function exactEvaluator($condition)
    {
        $conditionName = $condition['name'];
        $conditionValue = $condition['value'];
        $userValue = isset($this->userAttributes[$conditionName]) ? $this->userAttributes[$conditionName]: null;

        if (!$this->isValueTypeValidForExactConditions($conditionValue) ||
            ((is_int($conditionValue) || is_float($conditionValue)) && !Validator::isFiniteNumber($conditionValue))) {
            $this->logger->log(Logger::WARNING, sprintf(
                logs::UNKNOWN_CONDITION_VALUE,
                json_encode($condition)
            ));
            return null;
        }

        if (!$this->isValueTypeValidForExactConditions($userValue) ||
            !Validator::areValuesSameType($conditionValue, $userValue)) {
            $this->logger->log(Logger::WARNING, sprintf(
                logs::UNEXPECTED_TYPE,
                json_encode($condition),
                gettype($userValue),
                $conditionName
            ));
            return null;
        }

        if ((is_int($userValue) || is_float($userValue)) &&
            !Validator::isFiniteNumber($userValue)) {
            $this->logger->log(Logger::WARNING, sprintf(
                logs::INFINITE_ATTRIBUTE_VALUE,
                json_encode($condition),
                $conditionName
            ));
            return null;
        }

        return $conditionValue == $userValue;
    }