Болталка PascalABC.NET

Конвертации это operator implicit и operator explicit:

type
  t1=class
    i:integer;
    
    constructor(i:integer) :=
    self.i := i;
    
    class function operator implicit(i:integer):t1 := new t1(i);
    class function operator implicit(a:t1):integer := a.i;
  end;

begin
  var i:integer := 5;
  var a:t1;
  
  a := i;//тут неявно преобразовывает
  i := a;
  
  a := t1(i);     //тут явно преобразовывает
  i := integer(a);
end.
type
  t1=class
    i:integer;
    
    constructor(i:integer) :=
    self.i := i;
    
    class function operator explicit(i:integer):t1 := new t1(i);
    class function operator explicit(a:t1):integer := a.i;
  end;

begin
  var i:integer := 5;
  var a:t1;
  
  //a := i;//тут неявно преобразовывает
  //i := a;//не сработает, потому что explicit переводится "явно"
  
  a := t1(i);     //тут явно преобразовывает
  i := integer(a);
end.

Их можно делать экстеншн методами:

function operator explicit(self:integer):string; extensionmethod := self.ToString;
function operator explicit(self:string):integer; extensionmethod := StrToInt(self);

begin
  var i:integer := 5;
  var s:string;
  
  s := string(i);
  i := integer(s);
end.

Ну и, конечно, никто не мешает делать разные названия (SToBInt,SToInt и т.п.).

Проблема одинаковых названий - в том что компилятору придётся магическим образом угадывать какой тип вы ходите. Вот смотрите:

var i := SToR('1234');

Какой тип должен быть у i? Можно его, конечно, задать явно, но в таком случае выбор перегрузки будет зависеть от контекста вне функции (вне её параметров), что порождает кучу ошибок компилятора и помогает программисту делать глупые ошибки.

И, в конце концов, если вам не важна производительность - можете сделать SToR шаблонной, и тогда писать SToR&<BigInteger>, чтоб выбрать перегрузку для BigInteger. Производительность будет ниже потому - что придётся выбирать тип в процессе выполнения а не компиляции.

var i := SToR(‘1234’); в этом примере с не явным указанием типа переменной (var i ) тип берется по умолчанию, следовательно никакой магии. это же все так примитивно, зачем усложнять …чем меньше заморачиваешься на мелочах, тех больше концентрируешься на алгоритме основной программы, подставил функцию для конвертации и смотришь в смысл программы, а не заморачиваешься на отдельных нюансах которые захламляют код программы. Мне С++ не нравится только их за скобок в место begin end не как не могу привыкнуть отслеживать их, по этому приучил себя возле скобок делать комент типа //--------------------------------------- или конец функций //================================ да и в паскаль делаю тоже самое…но begin end это как то не приводит все в мешанину…

А какая, из ваших перегрузок, по умолчанию? И как получать перегрузки которые не_по_умолчанию.

ну вообще то в документации пишут что если вы пишите var i:=5 то подставляется тип по умолчанию integer, а в вашем случаи тот тип который выдаст функция отнасительно переменной тип который вы подставили, и если вы использовали (var i:= SToR(‘1234’); ) то если есть функция которая возвращает тип по умолчанию integer то ту функцию и подставит компилятор. в этом случаи все просто.

Да, но 5 это integer. А '5' это не integer, это char уже. Это излишнее усложнение - делать специально какой то атрибут или что то типо того, показывающий что первый параметр функции SToR - будет показывает какой тип у возвращаемого значения. И что если передать не константу, а считанную с клавиатуры строку?)).

Сообщение удалено. Причина: оскорбление пользователя.

Ох уж эти бойцы за производительность, лол. Не читавшие документацию…

Интересно, сколько бы в памяти вот это заняло ( хаскель, имеет тип списка, если что):

fibs = 1:1:(zipWith (+) fibs (tail fibs))

MagDest: По поводу орфографии и пунктуации - что ж, когда это переписка в чатике с другом - наверное, действительно не важно. Но это имеет свойство входить в правило, и, когда придется писать резюме на каком-нибудь хедхантере, вы очень неприятно удивитесь полному отсутствию предложений.

Грамотность была, есть, и будет показателем хотя бы минимального интеллекта. Если ее нет, человека всерьез не воспринимают. Нигде. В противном случае, для того же работодателя такой соискатель - полный кот в мешке, и придется очень сильно постараться, чтобы пересилить иными аргументами этот момент. Если, конечно, речь не идёт о продавце овощей на рынке.

Очень советую этот вопрос подтянуть. В жизни пригодится.

Указывать на это - пожалуй, в каком-то смысле, снобизм. Но лучше все-таки видеть обратную связь. Мы тут на форуме, в отличие от тех, к кому вы придете на работу устраиваться, укажем на проблемы. А первичный интервьюер (который зачастую оценивает как раз подобные параметры, и понятия не имеет ничего ни о технологиях, ни о ЯП) скажет “вы нам не подходите”, и будет прав. У него своя инструкция - отсеять этих самых “котов”, которые не нужны, даже будучи гениями в своей области.

1 лайк

А ещё - порой, мои сообщения бывают и едкими, и откровенно провокационными, но сейчас я просто хочу объяснить мотивацию моих предыдущих сообщений на эту тему. И помочь.

GRAMMATIK MACHT FREI.

Ну, и последний момент. В каждом сообществе приняты определенные негласные правила общения. О них не пишут в правилах форума. Они просто есть. Среди прочего - данный форум принадлежит обществу, тесно связанному с академической средой, в которой ценится грамотность, простота и качество изложения - тут привыкли читать хороший текст. И, кроме того - в ней принято обращаться к людям на Вы. Вне зависимости от возраста, статуса, и рода деятельности. А за низкосортные фразы вроде “на гОвно исходить” вообще применять штрафные санкции.

2 лайка

Почему-то вспомнил нашего дорогого Individ’а, который не так давно здорово настроение поднимал :smiley:

1 лайк

для вас будет показателем, потому что вы боитесь ошибаться. Следовательно, можно сделать вывод, у вас проблемы с креативностью и самооценкой. пусть заморачиваются на орфографии учительницы языка, а лично я руководствуюсь логикой и ассоциативным рядом без которого орфография вообще не имеет смысла.

Боюсь ошибаться? :-)) Походу, ad hominem в треде. Пожалуй, дискуссия окончена.

Сообщение удалено. Причина: оскорбление пользователя.

Мог бы и не отвечать - и достаточно долго этого не делал. Однако, Ваш агрессивный стиль общения вкупе с частыми фактическими нарушениями приводит вот к такому, ага.

А ещё я периодически местный тролль, и мне доставляет школьников злить, ага.

1 лайк

я думаю я школу гораздо раньше тебя закончил… тролить - это что то из стиля маньяков…)))

TITS OR GTFO.

В смысле, верится с трудом. А если это действительно так… То все гораздо хуже, чем я предполагал. Получается, имеем великовозрастного несостоявшегося недопрограммиста, который не имеет базовых понятий о том, как читать документацию, не проверяет факты, которые излагает, грязно выражается в не предназначенных для этого местах, и чересчур серьезно в плане разработки относится к языку программирования, созданному в основном для обучения школьников и первокурсников. Да, реально печаль. Спасибо. Made my day. Moar plz.

Сообщение удалено. Причина: оскорбление пользователя.

Ах, да, забыл добавить. Не умеет писать.

Прошу сообщение выше на русский перевести. ЯННП.

(демонстративное редактирование сообщения)

P.S. Создалось впечатление, что ко мне в квартиру пришли свидетели Иеговы, и начали нести чушь с воодушевлением :-))

1 лайк

Сообщение удалено. Причина: оскорбление пользователя.

Слив защщщщщщитан.

BlockFileOfT.rar.

Когда выполнение доходит до строчки (370 в файле BlockFileOfT):

raise new FileNotOpenedException(fi.FullName);

Программа сжирает всю оперативку за пару секунд и нагинает комп. Я посмотрел на IL код - вроде всё нормально. Ещё я поставил readln до и после этой строчки.

@Admin, мне уже 2 раза пришлось сделать принудительную перезагрузку. Пожалуйста, попытайтесь сделать что то в не сокращённом варианте программы.