Хэл Фултон - Программирование на языке Ruby
- Название:Программирование на языке Ruby
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2007
- Город:Москва
- ISBN:5-94074-357-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хэл Фултон - Программирование на языке Ruby краткое содержание
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Устанавливаемый дистрибутив весьма полон («батарейки в комплекте»). Он включает не только интерпретатор Ruby со всеми системными классами и стандартными библиотеками, но и целый ряд дополнительных библиотек и приложений. Многие из них предназначены исключительно для платформы Win32.
Устанавливаются следующие компоненты (некоторые из них необязательны):
• сам интерпретатор Ruby (пакет ruby-mswin32и пакет RubySrcдля тех, кто хочет познакомиться с исходными текстами на языке С);
• два часто используемых приложения: RubyGemsи rake;
• бесплатная копия книги Дейва Томаса (Dave Thomas) и Энди Ханта (Andy Hunt) «Programming Ruby» — первое издание в формате Windows Help;
• библиотека fxruby(обычно несколько версий), реализующая привязки к комплекту инструментов для создания графических интерфейсов FOX;
• инструменты для разработки приложений трехмерной графики OpenGLи GLUT;
• утилиты fxirbи fxri— графические версии программ irbи ri, написанные с применением библиотеки FXRuby;
• FreeRIDE — интегрированная среда разработки для Ruby с встроенным редактором, обозревателем исходных текстов и отладчиком (работа над совершенствованием этой программы ведется постоянно);
• SciTE — текстовый редактор на базе Scintilla;
• SWin и VRuby — инструменты для обработки сообщений Windows и разработки графических интерфейсов (обе являются частью проекта VisualuRuby, во главе которого стоит Ясухира Насикава);
• два анализатора XML (XMLParser и Expat), а также HTMLParser;
• библиотеки для работы с базами данных RubyDBI и DBD/ODBC;
• прочие библиотеки и инструменты, в том числе log4r, zlib, OpenSSL, Iconv, readlineи другие.
Планируются, но еще не готовы варианты этого инсталлятора и для других платформ.
14.7. Библиотеки, о которых полезно знать
Если вы программируете на Ruby в Windows, вам абсолютно необходим пакет, созданный Дэниэлем Бергером (Daniel Berger), одним из самых известных специалистов по Ruby на этой платформе. Библиотека win32-utils— в действительности целый набор мелких библиотек. Мы не можем рассмотреть их все подробно, но хотя бы перечислим.
• win32-changenotify— для мониторинга событий файловой системы;
• win32-clipboard— для взаимодействия с буфером обмена Windows;
• win32-etc— предоставляет аналоги таких UNIX-функций, как getpwnamи getpwuid;
• win32-event— интерфейс с событиями Windows (объектами Event);
• win32-eventlog— интерфейс с журналом событий;
• win32-ipc— базовый класс для всех объектов синхронизации в Windows (используется в библиотеке win32-eventи др.);
• win32-mmap— интерфейс к файлам, проецируемым на память, в Windows;
• win32-open3— библиотека open3для Windows (запустить команды и получить три описателя файлов);
• win32-pipe— именованные каналы в Windows;
• win32-process— реализация для Windows методов fork, waitи kill, имеющихся в UNIX;
• win32-sapi— интерфейс к Microsoft Speech API;
• win32-service— интерфейс к службам Windows;
• win32-shortcut— интерфейс для создания и модификации ярлыков в Windows;
• win32-sound— интерфейс для воспроизведения звуковых файлов в Windows;
Вот еще несколько библиотек, которые полезно иметь под рукой:
• Win32::Console— это перенос пакетов Win32::Console и Win32::Console::ANSI, первоначально написанных на языке Perl. Эта библиотека значительно упрощает работу с консолью в Windows (изменение цветов, позиционирование курсора, запрос информации и эмуляцию управляющих символов ANSI);
• ActiveDirectoryпозволяет легко взаимодействовать с экземплярами Active Directory, работающими на серверах под управлением Microsoft Windows;
• ruby-inifileпозволяет работать с ini-файлами (читать, разбирать и обновлять их).
В сети есть еще много библиотек, которые могут вам пригодиться. Ищите их на сайтах http://raa-ruby-lang.org и http://rubyforge.org.
14.8. Работа с файлами, каталогами и деревьями
При выполнении рутинных задач приходится много работать с файлами и каталогами, в том числе с целыми иерархиями каталогов. Немало материала на эту тему вошло в главу 4, но кое-какие важные моменты мы хотим осветить здесь.
Поскольку ввод/вывод — вещь системно-зависимая, то для различных систем приходится применять разные приемы. Если сомневаетесь, экспериментируйте!..
14.8.1. Несколько слов о текстовых фильтрах
Многие инструменты, которыми мы постоянно пользуемся (как поставляемые производителем, так и разрабатываемые собственными силами), — просто текстовые фильтры. Иными словами, они принимают на входе текст, каким-то образом преобразуют его и выводят. Классическими примерами текстовых фильтров в UNIX служат, в частности, программы sedи tr.
Иногда файл настолько мал, что целиком помещается в памяти. В этом случае возможны такие виды обработки, которые по-другому было бы сложно реализовать.
file = File.open(filename)
lines = file.readlines
# Какие-то операции...
lines.each { |x| puts x }
Бывает, что нужно обрабатывать файл построчно.
IO.foreach(filename) do |line|
# Какие-то операции...
puts line
end
Наконец, не забывайте, что все имена файлов, указанные в командной строке, автоматически собираются в объект ARGF, представляющий конкатенацию всех выходных данных (см. раздел 14.2.2). Мы можем вызывать, к примеру, метод ARGF.readlines, как если бы ARGFбыл объектом класса IO. Вся выходная информация будет, как обычно, направлена на стандартный вывод.
14.8.2. Копирование дерева каталогов (с символическими ссылками)
Пусть нужно скопировать целое дерево каталогов в новое место. Сделать это можно по-разному, но если в дереве есть символические ссылки, задача усложняется.
В листинге 14.5 приведено рекурсивное решение. Оно достаточно дружелюбно — контролирует входные данные и выводит информацию о порядке запуска.
require "fileutils"
def recurse(src, dst)
Dir.mkdir(dst)
Dir.foreach(src) do |e|
# Пропустить . и ..
next if [".",".."].include? e
fullname = src + "/" + e
newname = fullname.sub(Regexp.new(Regexp.escape(src)),dst)
if FileTest:rdirectory?(fullname)
recurse(fullname,newname)
elsif FileTest::symlink?(fullname)
linkname = 'ls -l #{fullname}'.sub(/.* -> /,"").chomp
newlink = linkname.dup
n = newlink.index($oldname)
next if n == nil
n2 = n + $oldname.length - 1
newlink[n..n2] = $newname
newlink.sub!(/\/\//,"/")
# newlink = linkname.sub(Regexp.new(Regexp.escape(src)),dst)
File.symlink(newlink, newname)
elsif FileTest::file?(fullname)
FileUtils.copy(fullname, newname)
else
puts "??? : #{fullname}"
end
end
end
# "Главная программа"
if ARGV.size != 2
puts "Usage: copytree oldname newname"
Интервал:
Закладка: