Я был на всех конференциях РИТ с 2008 года — ни одна себя не оправдала, _ни одна_. Сравните с тем же devconf там вход 3к рублей. Олег Бунин рубит бабло, не более того.
А еще они сохраняют контекст в котором были созданы. Это _очень_ важно.
Чем отличаются {} или do...end от Proc.new и lambda в вашем понимании? Мне кажется вы не поняли сути.
Для руби тоже существует подобный проект — Rubinius. Отличия в том что он поддерживает стандартные си расширения Ruby и видимо младше PyPy — текущая версия 1.0.0rc3. А вот perl на perl или php на php я что-то не припомню :)
По поводу понятности могу разуверить. Руби очень понятный. И миксины с блоками не так страшны как черт малюет. Сужу по своей конторе где многих кто приходил переучивали на Ruby.
А вот reduce для пустого элемента вернет ошибку, что не очень удобно. Если бы он мог принимать помимо лямбды и собственно массива еще «значение» по умолчанию, такой проблемы бы не было. Жду следующей статьи.
Пока для себя уяснил, что ruby хоть и медленней, но такие вещи как any, all, проход по массиву, reduce сделаны гораздо красивее.
Было интересно прочитать статью со стороны знатока Ruby.
Мое удивление вызывает только функция join. Мы же join-им массив, а не строку? Может логичнее все таки массив.join(строка)?
join переводиться как «соединить», таким образом: массив.соеденить(строкой) мне кажется логичней, чем строку.соединить(массивом)
Ошибаетесь. В Ruby есть модуль Enumerable, который подмешивается ко всем «итерируемым» классам и map определен в нем, а уже он подмешивается в другие классы. Например в 1.8 он подмешивается к String, а в 1.9 уже нет. Таким образом всегда можно написать свой класс, и подмешав в него Enumerable сделать доступным для него кучу фишек, таких как map, sort…
Чем отличаются {} или do...end от Proc.new и lambda в вашем понимании? Мне кажется вы не поняли сути.
Пока для себя уяснил, что ruby хоть и медленней, но такие вещи как any, all, проход по массиву, reduce сделаны гораздо красивее.
Мое удивление вызывает только функция join. Мы же join-им массив, а не строку? Может логичнее все таки массив.join(строка)?
join переводиться как «соединить», таким образом: массив.соеденить(строкой) мне кажется логичней, чем строку.соединить(массивом)
ints.reject {|e| e < 3}.map {|e| e+3}