Size: a a a

Язык программирования Julia / Julia programming language

2020 June 20

RS

Roman Samarev in Язык программирования Julia / Julia programming language
в сущности, если кому интересно - 3, 4, 5 лекции http://e-learning.bmstu.ru/moodle/course/view.php?id=119
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Результат - или новый объект, или модификация себя самого, но тогда имя должно быть с восклицательным знаком.


А, так вот откуда эта джулиевская конвенция.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
да. И блоки в Julia тоже из Ruby
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Спасибо большое за ответ.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
У Ruby есть ещё правило, если метод отвечает да/нет, значит имя его должно заканчиваться на вопросительный знак
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Но скопировали они их всё-таки кривовато. Явно не додумали до конца.

По крайней мере и я сам натыкался и регулярно вижу в слаке сожаления, что из do блока нельзя выйти как из обычного цикла.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Ага, а так как такого соглашения в джулии нет, то я обычно такие булевые методы называю "is<чтототам>"
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
Но скопировали они их всё-таки кривовато. Явно не додумали до конца.

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

RS

Roman Samarev in Язык программирования Julia / Julia programming language
ну, проще говоря, не надо лепить (1..10).map {|i| break if i > 5}, а надо писать (1..10).take_while {|i| i <= 5}
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
собственно, к Julia оно тоже применимо
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
диссонанс идёт именно из-за непонимания того, что блок - автономная функция
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
(не совсем так для Руби, но так для Julia)
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Хм.
Проблема в том, что наверное так не получается.

Чтобы была конкретика, я натолкнулся на такое в Tar.jl

Есть там метод, не помню как называется, допустим unpack()
И смысл его в том, что он идёт по tar объекту, и вытаскивает блоки вида (имя файла, файл) На самом деле больше, но это не суть важно.

И этот метод предоставляет возможность залезть внутрь функцией, то есть писать конструкции вида

unpack("foo.tar") do (name, io)
# здесь какая-то обработка, например создать файл с нужным именем в файловой системе и записать в него io
end
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Так вот, я хотел сделать простую вещь - обработать только первый файл. Вот не нужны мне были все остальные файлы.

Например, внутри tar лежали картинки все в каком-нибудь одном формате (png или jpg) и мне достаточно было взять первую из них, чтобы определить какие именно типы сохранены в этом таре, чтобы потом решить, что с ним делать дальше (например рассортировать разные tar по отдельным папкам)
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Пример немного из пальца высосан, но общая идея я думаю ясна.

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

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Или что-то не понимаю? Можно как-то по человечески эту проблему решить? Или это всё-таки плохо сам метод написан?
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
а точно там нет формы с возвратом перечислителя?
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
для Руби эта схема выглядела бы как метод unpack, который возвращает Enumerator
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
iterate? Нет, точно do block
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
вот unpack("foo.tar") должен бы в норме вернуть iterate
источник