Ошибки PascalABC.NET

type
  t1 = abstract sealed class end;

begin end.

Program1.pas(2) : Абстрактный класс не может иметь атрибут sealed

Приплыли… С чего это вдруг? Так ведь часто делают, взять только System.Math

2 лайка

Ах вот как, кажется @ibond невнимательно прочитал что я писал в #727 и не подумав исправил то что не надо было… Верните назад и исправьте то что я писал в той issue, пожалуйста))

2 лайка

При нажатии на кнопку “Форматировать код” срезы двоятся.

было a[2:], после форматирования становится a[22:]
было a[1::-1], после форматирования становится a[11::-1-1]
было a[::-1], после форматирования становится a[::-1::-1-1]

Пробовал на разных ОС Windows, везде одинаково.

Да, это была #752. В самом последнем билде исправили, обновитесь. Кстати это можно сделать из IDE:

image

На самом деле нужно просто поменять порядок атрибутов на sealed abstract, и никаких проблем не будет. А вообще, зачем убрали final? Ведь всяко удобнее писать final class, чем sealed abstract, да и код понятнее будет.

Версия ОС не влияет на работу автоформатирования кода.

final на сколько я знаю и не было ключевым словом. Его отображал анализатор кода для стандартных sealed классов.

  1. Вы сначала пробуйте а потом уже говорите. Я вот попробовал когда писал и сейчас на всяк, не работает это.

  2. Это всё равно костыль был бы, даже если бы работал.

Только в идеальном случае. И кроме версии ещё всё зависит от того как и что установлено.

это вы запостили неправильный issue. причем тут объявление переменной и абстрактный класс. и класс Math не абстрактный, а статический. public abstract sealed class в C# не работает, возвращать назад не буду.

Issue была про то что экземпляры abstract sealed классов невозможно создать, поэтому и объявлять переменные с их типом надо запретить. Что из названия и содержания Issue было не понятно?

А вы сами проверьте перед тем как писать:

Ну да, в C# он называется статичным, но в паскале нет такого ключевого слова.

Зато в C# есть static. Сейчас в паскале нету способа создать статичный класс, abstract sealed был единственным. Вы решили переделать, чтоб было как в C#?))) Если так - я, лично, не имею ничего против, такая запись короче, но сначала добавьте static, а потом уже убирайте abstract sealed

Кстати, в #526 вы сами сказали что в паскале это должно компилироваться.

@Admin, почему Value доступно из программы?

Первый модуль:

unit A;
type
  T1 = class
  internal
    class Value: integer;
  end;
end.

Второй модуль:

unit B;
uses A;
 
procedure SetValue(x: integer) := T1.Value := x;
 
end.

Программа:

uses A, B;
begin
  T1.Value := 1;
end.

internal значит что Value доступно из всей сборки. То есть обычно это работает как public, но, к примеру, если Value будет в .dll библиотеке - во всей библиотеке будет к нему доступ, но уже в программе которая подключит эту библиотеку доступа не будет.

1 лайк

abstract sealed в таком виде это безусловно бред, потому что позволяет описывать экземплярные методы. надо вводить static, который бы разрешал только статические. и уже запрещать объявлять переменные статических классов как в C#.

1 лайк

@Admin, почему F виден из программы, если:

library A;

type
  T1 = class
  internal 
    class procedure F();begin end;
  end;
end.

?

Я жду ответа от Вас, разработчики.

да ну глупости, не видит компилятор F.

Библиотека:

library A;

type
  T1 = class
  internal 
    class procedure F();begin end;
  end;
end.

С полями - работает. С методами - нет. Уважаемые разработчики, прошу объяснений, без игнорирования, как одного из прошлых моих сообщений.

Да, увидели. Внесли в Issue

1 лайк

Когда исправите данное недоразумение? Можно ли рассчитывать на то, что произойдет это не позже чем через месяц?

Ну как же? Я так всегда писал и пишу, и всё работает. Может, вся проблема в версии?[quote=“Sun_Serega, post:1206, topic:126”] Зато в C# есть static. Сейчас в паскале нету способа создать статичный класс, abstract sealed был единственным. Вы решили переделать, чтоб было как в C#?))) Если так - я, лично, не имею ничего против, такая запись короче, но сначала добавьте static, а потом уже убирайте abstract sealed… [/quote]

Могу предложить ввести в Паскаль ключевое слово static и сделать таким образом следующее:

  1. Объявление статического класса:
Type primer=static class
end;
  1. Заменить слово class для описания классовых (статических) полей, методов и конструкторов на static. В результате получим:
Type primer=class
public static procedure Body();
Begin
End;
end;

Думаю, это будет весьма полезно. P. S. : перепутал в начале темы final со static.

Всеми руками, носами и остальным за. class совершенно не интуитивно, как и abstract sealed.

@ibond может добавите issue с лейблом enhancement для static?