Объявление типа detachable G
указывает, что если соответствующий фактический универсальный тип является ссылочным типом, переменная этого типа может быть отсоединяемой.В этом случае было бы хорошо назначить Void
такой переменной.Тем не менее, также возможно, что фактический универсальный является расширенным типом.Префикс расширенного типа с detachable
не имеет никакого эффекта, тип остается тем же самым, и переменная не может быть назначена Void
.
В качестве примера, давайте рассмотрим более простой случай, когда нет формального общего ограничениядля параметра G
.Фактическим обобщением может быть STRING
, а переменная item
имеет тип detachable STRING
.В этом случае можно присвоить Void
для item
.
Теперь, если фактическим универсальным значением является INTEGER
, переменная имеет тип detachable INTEGER
, который эквивалентен INTEGER
.Присвоение Void
переменной этого типа не имеет смысла и не разрешено правилами языка.
Переменная item
все еще может быть установлена в Void
, если фактический универсальный параметр является ссылочным типом,Для этого может быть объявлена локальная переменная с таким же типом, и ее значение может быть присвоено item
:
local
default_item: like item
do
item := default_item