В новой версии 3.3.5.1669 происходит ошибка компиляции шахмат game2.pas
game2.pas(61) : Несколько подпрограмм могут быть вызваны
В новой версии 3.3.5.1669 происходит ошибка компиляции шахмат game2.pas
game2.pas(61) : Несколько подпрограмм могут быть вызваны
Я ещё обратил внимание, когда смотрел что-то на GitHub, что прошёл коммит ABCPascal.y с изменением в const_variable, где была закомментирована часть с tkRoundOpen const_expr tkRoundClose. Может и не связано, но всё равно непонятно зачем.
Да, оно даёт конфликт в грамматике
Так и есть. Несколько подпрограмм могут быть вызваны
function f1:byte;
begin
var p:procedure;
p := procedure->writeln(Result);
end;
begin end.
В данной версии компилятора не поддерживается замыкание данного типа символов
Тут ошибка в не правильном сообщении об ошибке или в том что эта фича не реализована? Стоит ли вообще разрешать использовать Result
более высокого уровня если последняя лямбда - процедура?
Если в программе есть форматная строка без параметров - анализатор кода и точки сворачивания сломаны во всей программе.
begin
Writeln($'test');
end.
Это ошибка? И если да, то в том что форматную строку без параметров не даёт делать, или в том что анализатор кода ломается?
В справке не сказано о количестве аргументов в кортежном присвоении… Т.к. „большие“ кортежи очень редки, то данная тонкость забывается!
begin
var(a,b,c,d,e,f,g,h):=(1,2,3,4,5,6,7,8);
end.
Такой код выдаст ошибку ;–(
Пишите какую ошибку выдаёт после кода, пожалуйста.
Возможно кортежи и не должны быть больше 7 элементов, но Undefined FileName
это всегда ошибка которую надо исправить.
Исправили все ошибки с неверными сообщениями в туплах
В Справке по методу cast
приведен такой пример:
begin
var a: sequence of integer;
var b: sequence of real;
a:=Seq(1,3,5);
b:=a.Cast&<real>;
end.
Естественно ожидать, что как и описано, мы получим последовательность элементов типа real. Но она какая-то “неправильная”. Во-первых, её не понимает ни Writeln(b)
, ни b.Println
. Во вторых, к ней нельзя применить ни одно расширение типа .Min, First, Sum и т.п. Да и тип у этого b, если отладчиком стать на end и посмотреть в “локальных переменных” - System.Linq.Enumerable+d__95`1[System.Double] - ну очень мало похож на описанный парой строк выше.
Не спешу открывать issue, может, просто что-то я не так понял?
В описании .NET нашёл, что tuple могут иметь произвольное количество элементов, но если их больше семи, то они представляются как цепочка, связанная через TRest.
У нас нет. Для этого пользуйтесь типом Tuple<>. И сами стройте такие цепочки
Надо убрать этот Cast из справки. Пример неправильный.
Issue явно не для целей замечаний по справке. А то видите - у нас наметились тенденции пихать в Issue всё что приходит на ум. Вместо того чтобы завести топик на форуме и обсуждать там всё что интересно.
Но то что оно с writeln
не работает, выдавая, при том, неадекватную ошибку всё же надо в issue.
Ну там же запрос ленивый - он неправильный и он срабатывает при writeln
А, вот как, когда value-тип обёрнут в объект у него не работает operator explicit
? В таком случае Select
использовать или что? Но ведь в Cast
посылается только тип, и на этапе компиляции, а в Select
целая функция, которая потом ещё по указателю вызывается… Это точно невозможно реализовать, к примеру проверкой при компиляции, если T
это value
-то вызывать по другому преобразование?
Я ничего не понял, что Вы написали в последнем топике. Если можно - примеры
begin
var i:integer := 5;
var o:object := i;
var r:real := real(o);
end.
После преобразования integer
к object
- его уже нельзя преобразовать к real
. То есть ищет типы к которым можно преобразовать среди наследников, но игнорирует integer.operator implicit
, которым integer
можно преобразовать к real
.