Ошибки PascalABC.NET

Да, то так не логично получается.

Пусть в качестве тренинга @Gleb перенесет отсюда некоторые посты в Болталку

Кстати, благодаря @MrFresnel в PascalABC.NET можно теперь так:

var a := new Dictionary<integer,integer>[10];
3 лайка
-Вы полагаете, все это будет носиться?

-Я полагаю, что все это следует шить!

Сколько не пытаюсь, никак не могу представить, где может понадобиться массив из десяти словарей)). Это что-то из разряда “треххвостой собаки” в рассуждениях академика Китайгородского, или просто мне кругозора не хватает?

Если обобщить - массив из элементов типа T, где T - generic, создавать, как выше, теперь возможно. Разве бесполезная вещь? И не надо объявлять псевдоним в type.

6 сообщений перенесены в тему Болталка PascalABC.NET

Сделал.

1 лайк

Я проверял перед отправкой на GitHub. У меня они воспроизводятся.

1 лайк

По какому принципу определяется производить ли вызов функции или возвращать ссылку на неё?

function F() := 1;

begin
  var (x, y) := (F, F());
  Writeln($'x.GetType() = {x.GetType()}, y.GetType() = {y.GetType()}');
end.

Можно было бы предположить, что x будет хранить ссылку на F, однако результаты вывода говорят совсем иное:

x.GetType() = System.Int32, y.GetType() = System.Int32

.

1 лайк

А я, кстати, вспомнил, где использовал array of array в Паскале. В ImageStyler. Теперь он не компилируется из-за Result := new array of Single[n];.

Указатель на функцию имеет тип Int32.

Не думаю, что это:

x = 1, y = 1

можно назвать указателем на функцию. Это, кстати, при следующем коде:

Writeln($'x = {x}, y = {y}');

.

Тогда - это баг. Делайте Issue.

Погодите. Но мы не выяснили при каких условиях так происходит. И также не выяснили, что должно быть в идеале. Давайте узнаем ответ у разработчиков. Как Вы на это смотрите?

x должен иметь тип делегата, а y - Int32.

Я не стал делать Issue, так как в том же PascalABC, насколько помню, можно производить вызовы подпрограмм без (). Вот еще пример (в FPC), где вызывается F, без скобочек:

//fpc 3.0.0

program HelloWorld;

procedure F();
begin
    Writeln(1);
end;

begin
    F;
end.

. На мой взгляд, лучше спросить разработчиков почему так.

Зачем Program?

В данном случае просто не стал из шаблона кода убирать. Не мешает для тестирования.

Но в чём смысл последнего кода? Если я правильно понял, то у Вас делегат имеет тип Int32, что является ошибкой. Второй же код - просто определение и вызов метода.