Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

=> "cello"

irb(main):002:0> 3*79

=> 237

irb(main):003:0> Dir.entries(".").size

=> 17

irb(main):004:0> rand

=> 0.850757389880155

irb(main):005:0> rand

=> 0.679879756672551

irb(main):006:0> defined? Foo

=> nil

irb(main):007:0> defined? Object

=> "constant"

irb(main):008:0> quit

$

Конечно,

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

[hal@localhost ch21]$ irb

irb(main):001:0> require 'mathn'

=> true

irb(main):002:0> gen = Prime.new

=> #

При установке флага

– r
выполняется require, поэтому можно включать код из внешнего файла. Предположим, что вы написали такой файл:

# File: foo.rb

class MyClass

 attr_accessor :alpha, :beta

 def initialize(a, b)

@alpha, @beta = a, b

 end

end

obj1 = MyClass.new(23,34)

obj2 = MyClass.new("abc","xyz")

Тогда можно сделать следующее:

$ irb -rfoo

irb(main):001:0> obj = MyClass.new(88,99)

=> #

Отметим, что хотя обращаться к сущностям, определенным в файле (например, к константе

MyClass
) мы можем, это не относится к локальным переменным. Локальные переменные доступны только в самом файле,
require
(выполненное хоть внутри, хоть вне
irb
) доступа к ним не дает.

Новичков часто смущает информация, выводимая

irb
:

$ irb -rfoo

irb(main):001:0> puts "hello"

hello

=> nil

Позвольте, что тут делает

nil
? Разумеется, это значение, возвращенное методом
puts
.

Еще один источник недоразумений — метод

eval
. Взгляните на следующий сеанс:

$ irb

irb (main) : 001:0> eval("var = 567")

=> 567

irb(main) :002:0> eval("var")

=> 567

irb(main):003:0> var

=> 567

Вас ничего не удивляет? Но давайте запустим следующий сценарий и посмотрим, что произойдет:

р eval("var = 567")

р eval("var")

р var

# Results:

# 567

# 567

# temp.rb:3: undefined local variable or method 'var' for main:Object

# (NameError)

У Ruby

есть такая особенность: когда вы выполняете
eval
, а вслед за ним еще один, они в некотором смысле разделяют «общую область видимости». Поэтому к переменной, определенной в первой строке, можно обратиться во второй (вне или внутри
irb
). Но различие проявляется, когда мы попытаемся обратиться к той же переменной без использования
eval
. В
irb
это работает, а в сценарии мы получаем ошибку. Что происходит?

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

irb
написана на Ruby; здравый смысл подсказывает, что она, скорее всего, внутри вызывает
eval
. Но мы только что убедились, что результат применения
eval
может отличаться от того, что мы видим на верхнем уровне, поэтому исполнение кода внутри
irb
не всегда идентично исполнению такого же кода в сценарии. Об этом не следует забывать, особенно если вы ставите какие-нибудь экзотические эксперименты.

Имейте в виду, что

irb
настраивается в широких пределах. При запуске она читает все инициализационные файлы, которые может найти, в следующем порядке:

• файл

~/.irbrc
;

• файл

.irbrc
;

• файл

irb.rс
;

• файл

_irbrc
;

• путь, указанный в переменной окружения

$irbrc
.

Инициализационные файлы пишутся на Ruby. В них можно настраивать текст приглашения и многое другое. Подробно эти файлы обсуждаются в книге «Programming Ruby». Ниже мы сделаем лишь несколько замечаний.

Если ваша версия Ruby собрана с поддержкой библиотеки GNU readline (обычно так и есть), то вы можете перемещаться по истории команд с помощью клавиш со стрелками вверх и вниз. Еще важнее, что работает механизм завершения по клавише Tab: когда вы набираете начало идентификатора, а затем нажимаете Tab,

irb
пытается дописать имя идентификатора за вас.

Чтобы включить механизм завершения, добавьте в файл

.irbrc
следующий фрагмент:

IRB.conf[:AUTO_INDENT] = true

IRB.сonf[:USE_READLINE] = true

IRB.conf[:LOAD_MODULES] ||= []

IRB.conf[:LOAD_MODULES] |= ['irb/completion']

В файле

.irbrc
может содержаться произвольный код. Например, я часто пользуюсь описанным ниже методом. Для краткости он назван
sm
(сокращение от «show methods»), а цель — вывести (в алфавитном порядке) список всех методов, которые можно вызывать для данного объекта, за исключением тех, которые он унаследовал от своих предков:

Поделиться:
Популярные книги

Последний натиск на восток ч. 2

Чайка Дмитрий
7. Третий Рим
Фантастика:
попаданцы
альтернативная история
7.50
рейтинг книги
Последний натиск на восток ч. 2

Черный Маг Императора 15

Герда Александр
15. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
фантастика: прочее
5.00
рейтинг книги
Черный Маг Императора 15

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Третий Генерал: Том VIII

Зот Бакалавр
7. Третий Генерал
Фантастика:
городское фэнтези
аниме
сказочная фантастика
попаданцы
5.00
рейтинг книги
Третий Генерал: Том VIII

Имя нам Легион. Том 11

Дорничев Дмитрий
11. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 11

Хозяин Стужи 3

Петров Максим Николаевич
3. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи 3

Третий. Том 5

INDIGO
5. Отпуск
Фантастика:
космическая фантастика
фантастика: прочее
5.00
рейтинг книги
Третий. Том 5

Правильный лекарь. Том 5

Измайлов Сергей
5. Неправильный лекарь
Фантастика:
городское фэнтези
аниме
сказочная фантастика
попаданцы
5.00
рейтинг книги
Правильный лекарь. Том 5

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.56
рейтинг книги
Долг

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

Как я строил магическую империю 10

Зубов Константин
10. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 10

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход