Болталка PascalABC.NET

Да, проверил. Это действительно так. То, что так сделано в C# - весомый аргумент.

using System;

class MainClass
{
	public static int Method()
	{
		return 1;
	}

	public static void Main (string[] args)
	{
		var x = Method;
		var y = Method();
		Console.WriteLine($"{x}, {y}");
	}
}

main.cs(12,5): error CS0815: An implicitly typed local variable declaration cannot be initialized with `method group’

Это не только в C#, и не только в С - подобных языках.

C# здесь - просто пример.

Нет, именно того же самого. Вы сейчас говорите о какой-то экзотике ради совместимости с привычной для С-языков возможностью что-то там для делегатов писать. И предлагаете ради этого обрубить в Pascal привычное средство языка Pascal. Это неразумно.

Что мешает при переходе на PascalABC.NET начать ставить скобочки?

Я, пожалуй, соглашусь с тем решением, которое приняли разработчики языка C# :

.

А ведь они не принимали такого решения…

Вы уже спрашивали, я уже отвечал, зачем повторяться?

Вы последнее время стали апеллировать к сказанному @Admin, теперь моя очередь. Он в соседней ветке сегодня предложил вместо болтовни заниматься делом. Хороший совет и я ему сейчас последую))))

1 лайк

У нас такое решение: везде где это возможно - вызов. Ссылка - только если мы ее явно присваиваем делегату соответствующего типа. Хуже когда функция возвращает функцию.

1 лайк

Совместимость

Ну, вашими бы устами. Это хорошо конечно. Просто к моему глубокому сожалению это беспорядочно разбросано равномерным тонким слоем по компилятору.

Тогда, может, стоить переоткрыть тот Issue, назначив ему label wontfix? Как соберетесь с силами - так закройте ее.

Ну скажем - болтать так болтать:

function f: ()->()->integer := ()->begin Result :=()->1; end;
begin
  var x: ()->integer;
  x := f;
  x := f();
  x := f()();
  Print(x.GetType);
  var y : ()->()->integer;
  y := f;
  y := f();
  y := f()();
  Print(y.GetType);
end.

Это по-нашему означает “никогда не реализуем”

y := f()();

это не правильно, и ошибку выдаёт, как и ожидалось.

Да, это ж болталка :slight_smile:

1 лайк

begin var a:=Arr(1,2,3); var b:=a; println(a); b[0]:=a[1]; println(a); end. почему так?

Собственно, что “почему так”? все нормально… [1,2,3] [2,2,3]

потому что динамические массивы при присваивании не копируются.

спасибо, за ответ. Как скопировать тогда?