Нельзя их запрещать: функции без скобок разрешены синтаксисом языка Паскаль.
Мне кажется лучше всегда требовать inherited - лучше явно указывать что идет вызов конструктора именно базового класса. А при попытке вызова конструктора базового класса без inherited выводить что-то подобное этому:
Для вызова конструктора Create(какие-то параметры) класса T, являющегося базовым для T1, требуется inherited.
В Object Pascal конструкторы наследуются, поэтому inherited не используется когда нет неоднозначности
То есть это является хорошим тоном для Object Pascal - когда inherited не указывают? Вопрос у меня скорее эстетический.
inherited указывают когда хотят исключить поиск в текущем классе. Про эстетику я ничего не знаю.
Не уверен, что мой вопрос в эту тему, но все же спрошу здесь. Sort(a) и a.Sort меняют массив, Shuffle(a) и a.Shuffle меняют массив, Reverse(a) меняет массив. Почему тогда a.Reverse не меняет массив? Не логично как-то. Или это вопрос не логики? Опять же есть метод a.Sorted возвращающий отсортированную последовательность. Почему нет таких же методов a.Shuffled и a.Reversed?
Мне кажется, что это вопрос синтаксического сахара. Где-то подсластили, где-то - нет.
Да, тут всё не очень логично. Мы бы сделали a.Reverse меняющим массив. Но a.Reverse это стандартный метод расширения последовательности и он возвращает последовательность.
a.Sorted мне тоже не очень нравится. Я его вводил как синоним a.OrderBy(x->x) поскольку сортировка последовательностей - дело частое. a.Reverse - как я уже сказал - уже есть в .NET - и он делает то же, что Вы бы хотели чтобы делал a.Reversed. a.Shuffled - крайне редкая ситуация - перемешать последовательность. К тому же крайне неэффективная. Обычно перемешивают массив.
Хорошо, понял.
Планируется ли унифицировать данные вещи чтобы стало все более логично?
Почему при:
begin
var A: PABCSystem.integer := 1;
end.
вылетает: Program1.pas(2) : Undefined name reference ‘integer’?
Там всё верно. Закрыл Issue
Т.е. в паскале последовательности вида +++++, ------, ++ - + + - - - - +++ —, считаются составленными из унарных полюсов и минусов и не требуют скобок? Никогда об этом не задумывался.
Почему Вы это считаете верным? Хотелось бы услышать Ваши аргументы.
И вот снова ошибка Undefined FileName, и снова её поиск был сущим адом, потому что каждый раз как я компилирую, чтоб проверить, не пропала ли ошибка - вылазит меседжбокс и файл перематывает на самый верх (из за того что переставляет курсор в самое начало). Я устал вас просит, но ещё больше я устал мириться с этим. Вы использовали доводы типа:
Как только основная ошибка будет устранена, будет устранена и эта.
(отсюда)
Но ошибок дающих Undefined FileName
неисчислимое количество, как и багов в целом. Пожалуйста, сделайте так чтоб не было меседжбокса и переставления курсора при Undefined FileName
, или найдите способ сделать чтоб ошибки такого типа не возникали никогда.
Да понятно, что все верно, это я “прошляпил” по аналогии с некоторыми другими языками, где запрещены подобные фокусы без скобок. Аргумент тут один и простой: разрешено синтаксисом языка Паскаль. Изначально.
Это ж везде есть. Вот, в C#:
i=i+++ +- - -j;
Про С++ я вообще молчу.
Отсюда обе ошибки устранены. И данный Issue тоже закрыт. Поэтому про неисчислимое количество - это одна. Эта.
Ошибки с Undefined FileName - увы - связаны с тем, что неаккуратный программист не ставил в соответствующем узле хотя бы какой-то Source context, хранящий имя файла и позицию.
Найти способ чтобы ошибки не возникали никогда - причем не только в компиляторах - наша давняя мечта тоже.