Почитайте Гради Буча и Страуструпа “Дизайн и эволюция C++”
Спасибо за совет.
Я имел в виду - исправьте заголовок темы
Думаю, что есть смысл закрепить эту тему.
-
@Admin, у Вас в справке где-нибудь сказано про & для экранирования ключевых слов?
-
В разделе про комментарии я не нашёл, что где-нибудь бы было сказано о том, что вложенные комментарии одного вида запрещены:
begin { {} } end.
. Во всяком случае в глазах начинающих это выглядело бы как недоработка, нежели как ограничение, так как об этом не сказано в справке. Единственное по этой теме:
Комментарии разных типов могут быть вложенными:
, но про вложенность комментариев одного вида ничего не сказано.
Ошибка не исправлена.
Вы неправы в том, что концентрируетесь на внутреннем представлении кортежей. И Вас это занимает более чем то, для чего кортежи предназначены. А предназначены они для того чтобы быть контейнером для полей разных типов. Как записи или классы. Независимо от внутреннего представления.
Кроме того, я уже говорил, что прошу не замусоривать issue вопросами о справке по языку.
Моё личное дело на чем концентрироваться. Если Вам это не нравиться - Ваше дело. Я Вас за это не осуждаю.
Предназначение, конечно, неизменно от того класс это или запись, но упоминать что они из себя представляют в плане реализации важно, хотя бы потому, что из этого можно сделать вывод как их стоит использовать. Большое количество объектов ссылочных типов замедлят работу приложения, нежели записей. В контексте оптимизации это полезно знать.
Акцентирование на технической части реализации не менее важно, чем общее описание структур данных.
Да, никак не реализуют нормальный анализатор кода для лямбд… Очень давно известная проблема.
Нет, тут подсказка для MatrGen не правильная. Вот что тут такое … “заполненный элементами x”? Это элементы, которые получаются на выходе функции gen(i, j) И в справке то же самое.
А… Действительно)
В чем отличие между Pos и PosEx?
begin
var s := 'Hello Hello';
var s0 := 'Hello';
Pos(s0, s).Println;//1
Pos(s0, s, 2).Println;//7
PosEx(s0, s).Println;//1
PosEx(s0, s, 2).Println;//7
end.
Подсказка для Pos:
Подсказка для PosEx:
Но они работают одинаково. Кроме того подсказка не показывает, что параметр from - параметр по умолчанию у обеих.
Надо не на результат а на реализацию смотреть:
function Pos(subs, s: string; from: integer): integer;
begin
if (subs = nil) or (subs.Length = 0) or (from > s.Length) then
Result := 0
else Result := s.IndexOf(subs, from - 1, System.StringComparison.Ordinal) + 1;
end;
function PosEx(subs, s: string; from: integer) := Pos(subs,s,from);
То есть - ни в чём.
Отличия нет, это сделано для совместимости с языками-предшественниками. Как говорили в первые годы советской власти, “тяжкое наследие царизма”.
Ошибка описания процедуры, в среде и в справке.
WriteElements<T>(fname: string; ss: sequence of T);
И, кстати, почему нет встроенного одноименного метода расширения, такого:
WriteElements<T>(self: file of T; ss: sequence of T); extensionmethod;
,
чтобы работал с уже открытым файлом и не перезаписывал все, а вставлял последовательность, начиная с позиции файлового указателя? Это с чем-то связано или просто забыли выписать?
Да, спасибо, исправили описание.
По поводу предлагаемого вами варианта - нам не хочется иметь стандартный метод, который массово пишет что-то в открытый файл с позиции указателя. С нашей точки зрения, такой подход провоцирует ошибки и не может быть включён в стандартную библиотеку.
Если вам такой подход нравится, напишите свою функцию и пользуйтесь на свой страх и риск
Справочник по языку>>Элементы функционального программирования>>Методы для последовательностей>>Метод Cast:
begin
var a: sequence of integer;
var b: sequence of real;
a := Seq(1,3,5);
b := a.Cast&<real>();
end.
Этот код неправильный, если добавить вывод для b
- получите ошибку, потому что integer as real
не работает.
не помешало бы тут обновить инфо о версии.
да и на GitHub раздел релизов обновлять периодически или вообще удалить, что бы с толку не сбивал тоже надо по моему мнению