Ошибки PascalABC.NET

Спасибо, попробую, как доберусь.

Вот ещё одна проблема: замыкания для self работают только если явно его указывать. Например.

type A = class
  
  procedure f(x:integer);
  begin
    print(x);
  end;
  
  procedure g();
  begin
    Arr(1, 2, 3).ForEach(x -> self.f(x));
  end;
end;

begin
end.

Не работает, если убрать self, причём по тексту ошибки непонятно, чего он хочет. Студенты путаются и бросают использовать лямбды, что прискорбно. Нельзя ли сделать, чтобы работало без self или хотя бы сообщение об ошибке с указанием его добавить?

function sqrtN(P,e,x0:double); Не указан возвращаемый тип функции ,но всё успешно компилируется . Подсказка ,кстати, говорит ,что это процедура. Так и должно быть ?

Полный код приведите пожалуйста

Исправили. Версия на сайте.

1 лайк
 program fun; 
    var P:real; 
    // Вычисление квадратного корня из P с погрешностью е при начальном приближении x0.
    function sqrtN(P,e,x0:double); 
    var x,dx,f:double; 
    begin 
    x:=x0; 
    while(true) do 
    begin 
    f:=x*x-P; 
    if(abs(f)<e) then break; 
    dx :=-f/(2.0*x); 
    x:=x+dx; 
    end; 
    sqrtN:=x; 
    end; 
    
    begin 
    writeln('Введите P'); 
    readln(P); 
    writeln('Корень из P:',sqrtN(P,0.00001,1):5:3); 
    end.

У Вас какая-то старая версия. В последней версии - ошибка компиляции, что правильно.

По поводу procedure - да, в Intellisense - неточность. Постараемся исправить

Спасибо. Успехов в развитии проекта.

var s := '1234';
writeln(s.All(char.IsDigit));

Падает.

Log

begin
    var t := new System.Dynamic.ExpandoObject();
    t.name = 'name';
end.

Так же не работает.

У нас не падает - правда, сообщение об ошибке дурацкое - исправим. А у Вас последняя версия?

Ну правильно - тут = вместо := и name нет в ExpandoObject:

https://msdn.microsoft.com/ru-ru/library/system.dynamic.expandoobject(v=vs.110).aspx

Дело не в “:=” (это я опечатался, когда код переписывал), и не в том, что там нет name. Прочтите описание:

Представляет объект, члены которого можно динамически добавлять и удалять во время выполнения.

Там же ниже пример:

class Program
{
    static void Main(string[] args)
    {
        dynamic employee, manager;

        employee = new ExpandoObject();
        employee.Name = "John Smith";
        employee.Age = 33;

        manager = new ExpandoObject();
        manager.Name = "Allison Brown";
        manager.Age = 42;
        manager.TeamSize = 10;

        WritePerson(manager);
        WritePerson(employee);
    }
    private static void WritePerson(dynamic person)
    {
        Console.WriteLine("{0} is {1} years old.",
                          person.Name, person.Age);
        // The following statement causes an exception
        // if you pass the employee object.
        // Console.WriteLine("Manages {0} people", person.TeamSize);
    }
}
// This code example produces the following output:
// John Smith is 33 years old.
// Allison Brown is 42 years old. 

PascalABC.NET не поддерживает DLR.

В приведённом ниже модуле при нажатии кнопки автоформатирования почему-то дублируется fCalcOp в 45 строке.

CalcUnit.pas (5,2 КБ)

1 лайк

Почему-то выдает ошибку

// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
begin
  Writeln('информатика'[3:9])
end.

А вот так - нормально работает. Странно очень.

// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
begin
  var s:='информатика';
  Writeln(s[3:9])
end.

А вот так работает:

begin
  Writeln(('информатика')[3:9])
end.

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

У меня на Убунту 16.04 не запускался консольный компилятор. Верней, при запуске вылетало исключение.

Unhandled Exception: System.TypeInitializationException: The type initializer for ‘PascalABCCompiler.SystemLibrary.SystemLibrary’ threw an exception. —> System.IO.FileNotFoundException: Could not load file or assembly or one of its dependencies. File name: ‘System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ at PascalABCCompiler.SystemLibrary.SystemLibrary.make_types () <0x4057dda0 + 0x0000b> in :0 …

Вылечил установкой пакета libmono-system-numerics4.0. Вдруг кому поможет…

Да, недавно было добавлено представление комплексных чисел в виде (a,b) и компилятор стал использовать System.Numerics. Странно, что он не идет в поставку mono-full

Во-первых, не mono-full, а mono-complete. А во-вторых: у меня он не стоит, чтобы на засорять десятками ненужных пакетов накопитель. Стоит то, что необходимо.

1 лайк