поставьте после ToInteger и ToString круглые скобки. ошибку исправим
У меня вот так работает:
s:=s.Replace('(\d+)\+(\d+)',m->(m.Groups[1].Value.ToInteger+m.Groups[2].Value.ToInteger).ToString);
Ошибка уже исправлена
Может, я тупой, но когда скобки ставил, все равно ошибка была, только другая. Groups[i] - это разве не объект? А если он объект, то странновато, что его ToInteger может превратить в значение (ну разве только она втихаря свойство Value выбирает)…
А она ГДЕ исправлена и как? PascalABC.NET 3.2, сборка 1383 от 09.02.2017 считает, что на текущую минуту обновлений нет…
Вот так в настоящий момент работает.
begin
var s := 'dfh';
s:=s.Replace('(\d+)\+(\d+)',m->(m.Groups[1].Value.ToInteger+m.Groups[2].Value.ToInteger).ToString);
end.
У кого не работает - в лекции ошибка. Без скобок можно обойтись, но Value писать обязательно
Понял. Собственно, это то же самое, что я написал выше. Я подумал, что вдруг сделали, как в Excel VBA: там если мы к объекту целиком обращаемся в выражении, по умолчанию возвращается его свойство Value.
не работает функция f:=OpenBinary&(‘имя файла’) (пишет “неизвестная функция”) и f.ReadElement (пишет,что ReadElement не объявлен в типе file of integer/(real) версия от 10.02.2017.
и CreateBinary аналогично
Скачайте сейчас
Сборка 1385 от 14.02, пишет, что версия актуальна.
В этой сборке этот код работает:
begin
var f := OpenBinary&<integer>('a.dat');
end.
Результат вдохновления “Лекцией №5”
function MatrMainDiag<T>(a:array[,]of T):sequence of T;
begin
var n:=Min(a.RowCount,a.ColCount);
for var i:=0 to n-1 do
yield a[i,i]
end;
Это какой-то синтаксический “затык”, потому что вот так все компилируется без проблем. И, что тоже немаловажно, верно выполняется.
function MatrMainDiag<T>(a:array[,]of T):sequence of T;
begin
var n:=Min(a.RowCount,a.ColCount);
for var i:=0 to n-1 do begin
var j:=i;
yield a[i,j]
end
end;
Исправили. Версия на сайте
Не знаю, ошибка это или нет, но даже если не ошибка, то недостаток большой.
Читаем в Справке “Целые типы”:
…для T определена экземплярная функция ToString, возвращающая строковое представление переменной данного типа.
Почему-то мне приятно думать, что Range(10,12) вернет последовательность безусловно целых чисел 10, 11, 12 и проекция Select(i->i.ToString) преобразует её в последовательность соответствующих строковых представлений. Но не тут-то было!
С гораздо меньшим энтузиазмом попробовал применить к последовательности доступный “по точке” метод ToString, потому что он уже не раз подкладывал мне известное хрюкающее парнокопытное (это не претензия, а констатация моей криворукости в данном вопросе). Результат был ожидаем:
И вот вопрос: можно без танцев с бубном получить из числовой последовательности последовательность строковых представлений членов этой последовательности? Не строку, которую дает JoinIntoString, а именно последовательность?
И да, у меня .NET 4.0, возможно в 4.5 это все работает, но проверить не могу.
Компилятор думает, что i.ToString в i->i.ToString это делегат. Так работает
begin
writeln(2);
Range(1,100).Select(i->i.ToString()).Println;
end.
Т.е. нужно писать не i.ToString, а i.ToString() как в C# Но это же синтаксически не очевидно.
Наткнулся тут в соседней ветке на красвое решение задачи разбивки суммы на отдельные банкноты с их количеством от @Ulysses, полез за напильником чтобы можно было в ней учитывать наличие банкнот определенного достоинства, добавить вариабельности и столкнулся с ошибкой компилятора. Применив бритву оккама дошел до сути. не совсем понял в чем она правда. возможно что в константной записи, возможно в том что она является элементом массива…
type
sometype = record
name: string;
end;
const
obj: sometype = (name: 'test');
var
k := Arr(obj);
begin
end.
UPD спасибо за оперативную работу, вижу в issues на gitHub уже есть.
Исправили. Версия на сайте