Да, помню. Сам тоже пробовал. Но хоть их потихоньку делают - их всё ещё не объявили официально. И, на сколько я понимаю, их всё ещё можно подключать только директивой, я бы хотя бы исправления этого подождал перед тем как использовать в своих программах.
Я вот уже пробую их использовать. Они, в принципе, готовы.
Нет, в проектах директивы подключаются автоматически.
А можно подробнее?
Да, и мне тоже))
Ну проект -> новый файл->пространство имен
То есть там же, где и библиотека, консольное приложение…
Нет. В открытом проекте переведите мышку в Структуру проекта (слева вверху) и щёлкните правой кнопкой по первой строке с названием проекта. Потом в контекстном меню Добавить\Новый файл. И там уже выбираете “Пространство имён”.
Теперь понял.
Извиняюсь заранее, если уже и так это знаете. На всякий случай. Visual Studio 2017 Community бесплатен если меньше 100 компьютеров и доход от его использования меньше 1 миллиона долларов в год (цифры мог немного переврать, но порядок тот). Надо просто форму заполнить и будет официальная лицензия. Я так и работаю. Инсталлятор у него более щадящий, чем предыдущие версии, кучу лишнего не ставит. Проект PascalABC.NET на github достаточно аккуратно сделан, так что после подключения к нему этой VS Community Вы можете спокойно компилировать, даже вносить какие-нибудь мелкие исправления.
Ошибка: Нельзя преобразовать тип real к integer
begin
var a := 10;
var b: real;
b := a < 5 ? a * 2 : a / 2; //в этой строке
b.Print
end.
а если с условным оператором то работает
if a < 5 then b := 2 * a
else b := a / 2;
и так тоже работает
b := a >= 5 ? a / 2 : a * 2;
Похоже, действительно баг, заводится какая-то внутренняя переменная, тип которой определяется типом выражения, стоящего после ?, а потом вычисленное выражение преобразуется к этому типу и выдается в качестве значения правой части оператора присваивания.
Вот так работает: b := a < 5 ? a * 2.0 : a / 2;
Нет, это не баг. Тип выражения ? : определяется по типу первого выражения, а оно - integer
Это в паскале абц или в других языках программирования тоже? В C# нашел такое:
Тогда это бомбочка, которую очень легко себе подложить. Ибо как НИГДЕ НЕ СКАЗАНО про то, что “Тип выражения ? : определяется по типу первого выражения,” Быть может, это надо как-то в Справке упомянуть?
А что делать если слева и справа - два типа, для каждого из которых есть implicit - оператор в другой тип?
Ну… вот, к примеру, сюрпризик.
begin
var (a, b) := (1, 2);
var c := a > b ? 1234567 : 1234567891011121314;
Println(c)
end.
Я всегда говорил, что много разных целочисленных при отсутствии у процессора аппаратного контроля за переполнением - зло.
Ну правильно, тип всего - это тип integer. Тут оба типа могут преобразовываться один в другой.
Сделали. Это работает. Если один тип можно преобразовать к другому не пользовательскими преобразованиями, а второй нет, то общим выбирается второй тип. Если оба можно преобразовать один к другому, то выбирается левый
На всякий случай - вот страница MSDN: https://msdn.microsoft.com/ru-ru/library/ty67wk28(v=vs.120) Там ничего не сказано, что делать, если оба типа целочисленные
А разве не integer и int64 ? Другое дело, что int64 преобразуется к integer молча и простым копированием четырех байт из восьми. Такое ощущение, что тут С/С++ порылся.
А нельзя ли, чтобы выбирался не левый, а более “длиннобайтовый” для случая целых чисел ? Чтобы работало как в Справке для арифметических выражений? Для удобства и единообразия.