Кстати кто-нибудь баловался с контрактами в котлине 1.3? Столкнулся с тем, что контракты поддерживаются только в верхнеуровневых функциях. Кто нибудь знает почему было принято именно такое решение?
Кстати кто-нибудь баловался с контрактами в котлине 1.3? Столкнулся с тем, что контракты поддерживаются только в верхнеуровневых функциях. Кто нибудь знает почему было принято именно такое решение?
В верхнеуровневых функциях нет shared mutable state, которое потенциально могло бы ломать смарткасты
Там больше проблем с наследованием и виртуальными вызовами. Скажем, если есть контракт у Base.foo, то какой контракт должен быть у Derived.foo? В обратном случае?
Там основное соображение в том, что правила наследования контрактов крайне не очевидны -- т.е. разрабу *значительно* тяжелее понять, что он написал контракты на иерархии наследования неправильно, чем понять, что он неправильно написал контракт к телу метода
Из сообщения выше не понятно кто я, но вы все правильно говорите - основная причина в том, что не понятно что делать с наследованием. Про захват состояния - не аргумент, т.к. через глобальные переменные тоже можно позахватывать и поменять что угодно.