нет, нельзя
-
Выражения +,* и т.д. нельзя использовать как операторы
-
Точка имеет приоритет, надо ставить скобки
3.>" Program1.pas(2) : Неизвестное имя ‘Print’ " (2**7) возвращает real, у него нет функции Step без параметров. Соответственно вызывается просто делегат step, которого нет метода Print
Кроме третьего - понятно(знать бы что такое делегат…), но когда компилятор выдаёт " () : Встречено ’ " - это странно.
Нет, так НЕ ДОЛЖНО работать! Расширение .Step определено для целочисленных типов.
begin
Trunc(2**7).Step.Take(50).Println
end.
2**7 - это Power(2,7):real
а что странного? операция степени недопустима в данном контексте, вот и предлагает двоеточие после цифиры (метки), а точку с запятой после буквы.
Вы пробовали запускать? Компилятор выдаёт, что встречена кавычка - больше ничего.
Да, запустил. Выдает: Синтаксическая ошибка : Встречено ‘**’, а ожидалось ‘:’
Сборка 1607, Вин10 x32, “.NET Framework 4.6 или более позднее обновление уже установлены на этом компьютере.”
У кого-нибудь еще звездочки съедаются в сообщении об ошибке? Мы вроде маркдаун в гридах не делали…
Что это?
Ошибка при работе с обобщенными типами:
Прошу исправить данную ошибку. В C#, например можно писать так: list.Add(new ListNode(i));Это ваша ошибка, компилятор вам так и сказал, это нельзя передать как var-параметр
, присвойте сначала переменной. А List.Add
будет работать как в C#.
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.
Оформляйте 2 багрепорта на гитхабе.
В смысле ‘c’.Print?
Да.
А почему тогда не замахнуться на любые типы?