История изменений
Исправление www_linux_org_ru, (текущая версия) :
Не сможет. Ибо он выведет сразу 3 подходящих типа и сообщит о неоднозначности.
у любого ооп-языка наличие нескольких типов для значения — это типичная ситуация
далее твой if назовем normal_if, мой — crazy_if
рассмотрим
var v1 = normal_if(bla_bla_bla) Grandson(2) else Grandson(3)
var v4 = crazy_if(bla_bla_bla) Grandfather(5) else Grandson(6)
в обоих случаях (v1 и v4) имеем полностью одинаковые варианты типизации из трех типов: Grandfather, Father, Grandson (при условии, что это reference types, ну или как в с++ звездочки поставить надо)
да, напомни твою нотацию, у тебя Grandfather > Grandson или наоборот?
А иначе они не отлавливаются. Ты вообще видел размеры тестов у серьёзных компиляторов?
если ты мне предлагаешь делать юнит-тесты *такого же* размера для компилятора, написанного на Н2, то я наверно предпочту вместо него какой-нить простой препроцессор или просто свой любимый язык — тестов столько же
Исходная версия www_linux_org_ru, :
Не сможет. Ибо он выведет сразу 3 подходящих типа и сообщит о неоднозначности.
у любого ооп-языка наличие нескольких типов для значения — это типичная ситуация
далее твой if назовем normal_if, мой — crazy_if
рассмотрим
var v1 = normal_if(bla_bla_bla) Grandson(2) else Grandson(3)
var v4 = crazy_if(bla_bla_bla) Grandfather(5) else Grandson(6)
в обоих случаях (v1 и v4) имеем по 3 полностью одинаковых варианта типизации: Grandfather, Father, Grandson (при условии, что это reference types, ну или как в с++ звездочки поставить надо)
да, напомни твою нотацию, у тебя Grandfather > Grandson или наоборот?
А иначе они не отлавливаются. Ты вообще видел размеры тестов у серьёзных компиляторов?
если ты мне предлагаешь делать юнит-тесты *такого же* размера для компилятора, написанного на Н2, то я наверно предпочту вместо него какой-нить простой препроцессор или просто свой любимый язык — тестов столько же