parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Может Парсеру в купе к появлению return и break - завести аналог die() в Perl или exit()/quit() из Python?

dimolezhkin 11.05.2021 16:18

И если задать результат работы вызывающего метода можно через $caller.result, то штатного способа прекратить работу вызывающего метода нет, поэтому используется такой трюк
Я понимаю, что это чисто авторская имплементация, и чисто ситуативный и даже мастер-классовый (кстати весьма прикольный) пример, как вообще можно. Потому, что будь это цепочка вызовов, то, как я понимаю, пришлось бы прокидывать return везде и всюду (если прям включить жадину до лишних вычислений).

У Парсера же нет безусловной остановки скрипта, как die() у Perl или exit(),quit() у Python? Но при этом "не пригодилось" столько лет.

Я понимаю, что лучше стараться писать максимально последовательную логику, и стараться поменьше влетать в инверсию управления с такими кейсами, но реальность всегда сложнее.

Кстати, в документации написано, что ^break[] вне циклов - вызывает ошибку компиляции, что вполне хороший кандидат на применение его в качестве безусловной остановки скрипта и сохранением обратной совместимости.

Понятно, что чисто технически существует как минимум 2 способа реализации такого поведения:
- один, как в примере auto.p с выбросом ^return[] в контексте всех методов
- второй, что-нить типа ввести служебный код ошибки и обтравив основную точку старта в ^try{} - райзить через ^throw[] сценарий безусловной "штатной" остановки (если я все правильно представляю, как это сработает)

Но читаемость, что первого, что второго - на большом коде, скажем, такая себе. Представляю себе дебаг цепочки вызова этих остановок, или обертка всего кода сразу в ^try{} :) выглядит как "индийский патч" и сбивает с толку.