Наверное, чтоб когда передали в Arr
не params элементы а именно массив - в ответе возвращало не ссылку на него же. Хотя всё это таки бред.
Насколько я понимаю, эти операции перестают работать только для констант, так? То есть вот такое сохраняет старую семантику:
var s: set of integer := [1,2,2,3];
s := s + [1,2,5,6];
Если так, то особых проблем не усматриваю.
Первая из Ваших строк, насколько я понял, точно будет работать. Вторая - не уверен, поскольку операнд [1,2,5,6] теперь будет считаться массивом. В первой строке [1,2,2,6] - не операнд, а инициализатор, а тут получается что должно идти неявное приведение массива к множеству. А почему, собственно, с точки зрения измененной семантики языка? Ну, либо это надо учесть при перегрузке всех подобных операторов. Посмотрим, что скажет автор идеи.
Кстати, тут есть еще вопрос, который как-то ускользнул.Вот пример из Справки:
var
bs: ByteSet := [1,3,5,20..25];
fios: StringSet := ['Иванов','Петров','Сидорова'];
Там он приводится как описание множества с инициализацией и автовыведением типа. А теперь получается, что это будут массивы?
Далее, как быть с этим? :
Множество, задаваемое конструктором множества, может иметь элементы
различных типов, например:
[1..4,5.5,'c','xyz',Winter..Autumn]
В этом случае вычисляется наиболее общий тип, и он объявляется
базовым типом множества. Например:
[1..4,5.5] // set of real
['1','abc'] // set of string
[1,'1'] // set of object
Для множеств имеет место структурная эквивалентность типов.
И при всем этом
var bs1: set of byte := [1,3,5,20..25]; // set of byte
var bs2 := [1,3,5,20..25]; // array of integer
Такой занятный когнитивный диссонансик. Для внесения пущей сумятицы в неокрепшие умы.
И он схватил мумию в охапку и понёс в прихожую.
– Как приятно будет Филле и Рулле встретиться с Мамочкой!
("Карлсон, который живет на крыше")
Можно предусмотреть сложение множества с массивом - и результатом будет множество. То есть, будет работать как раньше.
Если bs - это set of byte, то по идее всё должно приводиться к set of byte. Конструкция, используемая в инициализаторе - ещё не массив.
В произвольном контексте это будет массив objectов, что ничему не противоречит
Во втором случае это будет специальный тип поскольку он содержит диапазоны. Он будет более эффективно храниться и неявно преобразовываться к set of integer и array of integer.
Прошу еще раз понять, что
var bs := [1,3,5,20]; // array of integer
var bs := [1,3,5,20..25]; // некий третий тип - не массив и не множество
Вообще-то я имел в виду дух, а не букву. Но готов немного изменить вопрос.
var bs1: set of byte := [1,3,5,20,25]; // set of byte
var bs2 := [1,3,5,20,25]; // array of integer
Дух уже и так такой есть:
var a: array of integer := (1,2,3);
var t := (1,2,3);
И никто не умер
Да тут все ясно, тут по любому массив получается. А там - не описал тип - массив, описал - может и множество. Выходит какое-то понятие: “тип по умолчанию”. Ну вот у числовых констант тип по умолчанию integer, но если литерал в правой части изображает число, переменную не получится описать строковой.
Во втором случае кортеж.
Я тут тоже подумал… Дело хорошее, и плюсы явно видны. Тут уже об этом говорили. Из минусов только отход – нет, не от Делфи )) – а от “школьного” Паскаля. На ЕГЭ ведь так и будут на старославянском, ой, на старопаскальском ) писать. Будем, как обычно, учить два языка…
Но это ничуть не причина отказываться от таких новшеств. Как бы (наверное) процитировал в этом месте Александр Викторович, “Если ты ещё раз вмешаешься в опыты академика, и станешь на пути технического прогресса, я тебя…”
Если нетрудно - Вадим - приведите пример кода. где отход от старого Паскаля будет с вашей точки зрения чувствоваться?
Да, это я в полемический раж вошел. Неправ. Посыпать, что ли, пеплом голову и в пустыню удалиться, оглашая ее горестными стенаниями и воплями?
Я изначально писал, что двумя руками за нововведение. Попытка раскачать лодку, изобразив на время оппонента, потерпела крах. @Admin, не пора ли подумать о реализации задуманного? )))
Я такой пример привести не смогу, потому что отличия в коде и вправду минимальны. Я немножко про другое говорил: про довольно большую массу учителей, которые каждое нововведение будут принимать в штыки. То есть тут они мне скажут: ну вот, теперь ещё и квадратные скобочки – не множества… То есть ещё одна причина учить по-старому.
Но, повторюсь, не считаю это причиной не менять язык. Всегда будут недовольные. Так что этот мой “минус” – это не минус к предложению, а всего лишь минус нашего школьного сообщества. Других минусов не вижу )
Встречное предложение, которое ничего не ломает. Для многомерных массивов разрешить такое
Matr((1,2,3),(2,3,4))
Инициализация обычных массивов и так нормальная: Arr(1,2,3)
Наверное, всё же такое:
Matr([1,2,3],[2,3,4])
Я согласен.