До сих пор мы видели несколько различных видов, или классов, объектов: строки, целые числа, дробные числа, массивы, а также несколько особых объектов (true, false и nil), о которых мы поговорим позже. В Ruby эти классы всегда записываются с заглавной буквы: String, Integer, Float, Array… и т. д. В общем случае, если мы хотим создать новый объект определённого класса, мы используем new:
a = Array.
new +
[12345]
#
Сложение
массивов.
b = String
. new +
'hello'
#
Сложение
строк.
c = Time.new
puts 'a =
'+a.to
s
puts 'b =
1 o t b. +
s
puts 'c =
'+c.to
s
a = 12345 b = hello
c = Wed Jun 28 02:11:24 GMT 2006
Так как мы можем создавать массивы и строки с помощью[…] и '…' соответственно, мы редко создаём их с помощью new. (Хотя это и не совсем очевидно из предыдущего примера, String.new создаёт пустую строку, а Array.new создаёт пустой массив.) Кроме того, числа являются особыми исключениями: вы не можете создать целое число с помощью Integer.new. Вам придётся просто записать число.
Класс TIME
И что же особенного в этом классе Time? Объекты класса Time представляют моменты времени. Вы можете прибавлять числа к (или вычитать из) объектов времени, чтобы получить новые моменты времени: прибавление 1.5 к моменту времени создаст новый момент, который на полторы секунды позже первого:
time = Time.new
#
Момент, когда вы получили эту web–страницу.
time2 = time + 60
#
Одной минутой позже.
puts time
puts time2
Wed
Jun
28
02
4 2 1 1
GMT
2006
Wed
Jun
28
02
12:24
GMT
2006
Вы также можете создавать объект времени, соответствующий определённому моменту, используя т^е.тк-^те:
puts
Time.mktime(2000,
1,
1)
# Двухтысячный год (Y2K).
puts
Time.mktime(1976,
8,
3, 10, 11)
# Когда я родился.
Sat
Jan
01
00:00:00
GMT
2000
Tue
u <
3 0
10:11:00
T M G
6 7 9 1
Обратите внимание: момент моего рождения задан по Тихоокеанскому летнему времени (Pacific Daylight Savings Time, PDT). Хотя, когда наступил 2000-й год, было Тихоокеанское стандартное время (Pacific Standard Time, PST), по крайней мере для нас, жителей Западного берега. Скобки здесь нужны, чтобы сгруппировать параметры метода mktime. Чем больше параметров вы указываете, тем более точным становится ваше время.
Вы можете сравнивать время с помощью методов сравнения (более раннее время меньше, чем более позднее время), а если вы вычтете одно время из другого, вы получите разницу между ними в секундах. Поиграйте с этим немного!
Попробуйте ещё кое-что
• Один миллиард секунд… Выясните точно, в какую секунду вы родились (если сможете). Вычислите, когда вы достигнете (или, возможно, уже достигли?) возраста в один миллиард секунд. А потом отметьте это в вашем календаре.
• С днём рождения! Спросите, в каком году человек родился, затем в каком месяце, потом в какой день. Вычислите, сколько ему лет, и выдайте ему большой ХЛОП! на каждый его день рождения.
Класс Hash
Другой полезный класс – это класс Hash. Хэши во многом похожи на массивы: в них имеется набор слотов, которые могут указывать на различные объекты. Однако в массиве слоты выстроены в ряд, и каждый из них пронумерован (начиная с нуля). В хэше слоты не располагаются подряд (они просто как-то беспорядочно свалены вместе), и вы можете использовать для обращения к слоту любой объект, а не только число. Использовать хэши хорошо тогда, когда у вас есть набор каких-нибудь вещей, которые вы хотите обрабатывать, но они совсем не укладываются в нумерованный список. Например, цвета, которые я использую для различных частей кода, положенного в основу этого учебника:
colorArray =
[]
# то же, что Array.new
colorHash =
{ }
# то же, что Hash.new
colorArray[0]
= 'красный'
colorArray[1]
= 'зелёный'
colorHash['строки']
colorHash['числа']
colorHash['^Ki4eBbie слова'] = 'синий' colorArray.each do |color| puts color end
colorHash.each do |codeType, color| puts codeType + ': ' + color end
красный
зелёный
синий
строки: красный ключевые слова: синий числа: зелёный