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

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

Жанры

Программирование на языке 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»), а цель — вывести (в алфавитном порядке) список всех методов, которые можно вызывать для данного объекта, за исключением тех, которые он унаследовал от своих предков:

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

Рубеж

Дяченко Марина и Сергей
Фантастика:
фэнтези
8.29
рейтинг книги
Рубеж

Последний реанорец. Том VIII

Павлов Вел
7. Высшая Речь
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Последний реанорец. Том VIII

Интриганка

Шелдон Сидни
Приключения:
исторические приключения
9.24
рейтинг книги
Интриганка

Кодекс Императора II

Сапфир Олег
2. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора II

Последний Паладин. Том 5

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

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Гримуар темного лорда VI

Николай Гоголь

Труайя Анри
Проза:
историческая проза
6.40
рейтинг книги
Николай Гоголь

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Играть... в тебя

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Гримуар темного лорда VII

Локки 9. Потомок бога

Решетов Евгений Валерьевич
9. Локки
Фантастика:
фэнтези
попаданцы
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 9. Потомок бога

Жена моего мужа

Донцова Дарья
6. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.30
рейтинг книги
Жена моего мужа

Программирование на Objective-C 2.0

Кочан Стивен
Библиотека разработчика
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Программирование на Objective-C 2.0