<<Метапрограммирование на Ruby
Лекция 1: Введение в язык Ruby. Примеры кода
Hello, world, and others
puts "Hello, world"
puts 2+3*4
puts "a", 0.1234, 10
# Вывод квадратов натуральных чисел
puts (1..10).map{|i| i*i}
Таблица умножения
10.times do |x|
10.times do |y|
print "%5d" % [ (x+1) * (y+1) ]
end
puts
end
Методы map, times, each
(100..110).each do |n|
puts n
end
# Вывод n! для n = 1, 2, ..., 20
n = 1
20.times do |i|
n *= i + 1
puts n
end
# массив остатков степеней двойки по модулю 13
a = (1..100).map{|i| (2**i) % 13}
p a
Числа Фибоначчи
# С - стиль программирования
# Так писать на Ruby не следует
$d = []
def fib(n)
if d[n]
return d[n]
end
if n == 1 || n == 0
return 1
end
return d[n] = fib(n-1) + fib(n-2)
end
# Ruby style
def fib(n)
(@d ||= [1,1])[n] ||= (
fib(n-1) + fib(n-2)
)
end
Важные замечания
- Методы могут получать не только числа, строки, и др. объекты, но и блоки неименованные функции, определяемые прямо на месте (см. times, map, each).
- Буквы $, @, @@ в начале имени переменной обозначают область видимости (глобальная переменная, переменная экземпляра класса, переменная класса)
- Идиома
||=
"инициализировать, если не инициализированно" * Ложь - это nil и false. Остальные значения соответствуют true, в том числе 0.
Ссылки