Страница 2 из 2

Re: uses - почему так?

СообщениеДобавлено: 27.03.2019 11:42:17
stanilar
Лекс Айрин будет та-же проблема, что и при стандартных юзес. Никаких новых чудес не появится.

Re: uses - почему так?

СообщениеДобавлено: 27.03.2019 12:09:57
Лекс Айрин
stanilar, тогда эта фишка ненужна.

Re: uses - почему так?

СообщениеДобавлено: 27.03.2019 13:26:30
stanilar
Лекс Айрин Это не фишка. Это логичное продолжение тех принципов, что есть. Так же как type-секции, которые есть что в секции объявления,что в секции реализации и еще в области видимости процедуры.

А вот проблему ТС это решит с головой, простым перемещением uses в тело процедуры.

Re: uses - почему так?

СообщениеДобавлено: 27.03.2019 13:34:43
zub
stanilar
все в порядке с усес в паскале, ненадо тут ничего придумывать

Re: uses - почему так?

СообщениеДобавлено: 27.03.2019 13:55:59
Лекс Айрин
stanilar, вообще-то, подобное есть дурная привычка С, которую даже они стараются избегать. И так оттуда понадергали все, что можно и даже часть того, что нельзя. Типа, protected секции в классах.
У ТС не проблема, а непонятка.

Re: uses - почему так?

СообщениеДобавлено: 28.03.2019 12:44:03
stanilar
Лекс Айрин Ну насчет дурной можно привести два предельных примера - первый это когда все uses в паблик-секции и без переопределения непонятно какой тип откуда берется в итоге. Второй это когда все uses указаны для процедур.

Re: uses - почему так?

СообщениеДобавлено: 28.03.2019 13:54:10
Лекс Айрин
stanilar, если ты не умеешь работать с ide это только твои проблемы, а не языка. Где что определено находится достаточно легко. За исключением некоторых случаев, когда все динамически переопределяется во время выполнения. Да и то, в половине, если не больше, случаев все находится стандартными методами.

Re: uses - почему так?

СообщениеДобавлено: 28.03.2019 17:01:46
stanilar
Лекс Айрин Дело не в иде, но в возможности однозначной трактовки текста программы. Главный козырь паскаля, все таки.

Re: uses - почему так?

СообщениеДобавлено: 28.03.2019 18:29:33
Снег Север
stanilar, для однозначной трактовки надо воздерживаться от переопределения переменных в модулях.

Re: uses - почему так?

СообщениеДобавлено: 28.03.2019 21:06:28
Лекс Айрин
stanilar, трактовка и так однозначна. Любой момент, который кажется неясным подхватывается в реалтайме. Неоднозначность имён тоже. По принципу кто последний, тот и рулит. Подключение модулей для каждой отдельной подпрограммы лишь сильно усложнит работу компилятора. Кстати, я бы не удивился, если бы для каждой конструкции пришлось бы использовать имя модуля в которой оно встречается. Кстати, кое-где в самом лазарусе подобное даже есть типа ' point:=window.point;' за точность не ручаюсь, но выглядит забавно. То есть, даже в самой среде не везде удалось обеспечить уникальность имён.
И да, объектный паскаль уже не тот виртовский язык, который легко описывался на одной страничке в тетради. И неоднозначностей в нем много, но только не в подключении модулей. Этот момент улучшить очень тяжело.

Re: uses - почему так?

СообщениеДобавлено: 29.03.2019 00:14:46
stanilar
Лекс Айрин писал(а):По принципу кто последний, тот и рулит.

Ну и где здесь однозначность? Т.е. раз не сравнил сотню-две подключенных файлов из двух секций, то либо сам виноват либо с иде работать не умеешь?

Re: uses - почему так?

СообщениеДобавлено: 29.03.2019 06:05:50
Лекс Айрин
stanilar, в среде есть возможность узнать где находится определение нужного типа или переменной. Так что искать ручками по всем файлам не надо. Да и перекрытие определений более новыми вполне понятно. Фактически, подключение модуля означает, полное копирование его содержимого в целевой файл. За исключением некоторых нюансов. Так что при желании все эти фокусы можно повторить и без других модулей. Если не запутаешься. Хотя тут могут помочь inc файлы.

Re: uses - почему так?

СообщениеДобавлено: 08.11.2019 13:44:17
Cheb
Никто не заморачивается потому что пространство имён можно указывать вручную.
Пример: я у себя в проекте везде переопределил boolean на longbool, но в редких случаях, когда нужен стандартный, просто пишу system.boolean

В частности, когда переопределяешь класс под тем же именем:
Код: Выделить всё
TStringList = class(classes.TStringList)