Выражения +,* и т.д. нельзя использовать как операторы
Точка имеет приоритет, надо ставить скобки
3.>" Program1.pas(2) : Неизвестное имя ‘Print’ "
(2**7) возвращает real, у него нет функции Step без параметров. Соответственно вызывается просто делегат step, которого нет метода Print
Type
A = auto class
E := '0123456789';
F: array[char] of integer;
Constructor ();
Begin
End;
Procedure B (А, Б: StringBuilder);
Begin
End;
End;
Begin
var C := '123';
var D := '4567';
(new A()).B(C,D);
End.
Код забавнейший получился… Если поставить точку после C или D на предпоследней строке, то там не отобразатся многие методы-расширения (print, println, inverse…). Причём если (new A()).B(C.print,D); - выдаст ошибку, то (new A()).B(C.inverse,D); скомпилируется и правильно выполнится. Кстати, непонятно, почему
"Нельзя преобразовать тип IEnumerable к System.Text.StringBuilder", если это переменная типа string; То есть, метода inverse у StringBuilder нет, но он компилируется, и print’а тоже нет, но он уже не компилируется…
Эти методы вообще нигде не видно. Но, если убрать E или F, то волшебным образом всё встаёт на свои места…
А если убрать конструктор, получим ошибку компиляции, которая в ином случае вовсе и не ошибка…
А кто во всём виноват? - правильно! Автокласс! Стоит его убрать, и все эти ошибки пропадают.
А причем тут методы StringBuilder’а? Фактические параметры C и D имеют тип string, у которого есть методы inverse и print. С методом print, похоже, в этом случае действительно непорядок, inverse же работает так, как и должен.
Да, для автокласса intellisense их не подсказывает – недоработка.
Мне больше всего непонятно, почему результат метода 'string'.Print не совместим по присваиванию со string (без явного вызова ToString):
begin
var S := 'abc';
println(S.Println.GetType); // Как бы 'System.String'
//S := S.Println; // Но так не работает, хотя метод возвращает совместимый 'sequence of T'
S := S.Println.ToString; // Так OK
// Что это за тип такой мудреный?
println((S.Println + '123').GetType); // System.Linq.Enumerable+<ConcatIterator>d__59`1[System.Char]
end.