The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

8.3 Реализация

8.3 Реализация

Предыдущая  Содержание  Следующая V*D*V

Используя вышеприведённые аксиомы методы isA() и isOf() довольно просто реализовать:

 

% isA {

    return _self && classOf(_self) == class;

}

 

% isOf {

    if (_self) {

        const struct Class * myClass = classOf(_self);

 

        if (class != Object)

            while (myClass != class)

                if (myClass != Object)

                    myClass = super(myClass);

                else

                    return 0;

        return 1;

    }

    return 0;

}

 

Первая, очень наивная реализация cast() была бы основана на isOf():

 

% cast {

    assert(isOf(_self, class));

    return (void *) _self;

}

 

isOf(), а поэтому и cast(), не работает для пустых указателей. isOf() полагает без дальнейших проверок, что любой указатель указывает по крайней мере на экземпляр Object; поэтому, мы можем быть уверены, что cast(Object, x) не будет работать только для нулевых указателей. Однако, как мы увидим в разделе 8.5, это решение легко может иметь неприятные последствия.

 

Предыдущая  Содержание  Следующая