понеділок, 9 березня 2009 р.

Eval і Ruby

У Ruby (та інших скриптових мовах) є метод eval, який отримує рядок і виконує цей рядок в поточному контексті
так (майже так), як ніби він був написана програмістом в місці виклику eval.
Власне, засоби, подібні eval, є і в компільованих мовах програмування.

Приклад для Ruby:
eval("puts 'Hello World'")

Вивід:
Hello World


Повертаючись до попереднього посту зробимо деякі зміни у коді.
Маємо метод, який повертає кількість нових повідомлень.
def new_messages
get_feed['messages']['count']
end


Аналогічно можна написати для фотографій(photos) і відео(videos)...
Керуючись філософською думкою DRY підемо іншим шляхом.
Замість того щоб писати 9 майже однакових методів, застосуємо силу eval.
[:friends, :messages, :events, :groups, :photos, :videos, :notes, :opinions, :offers].each do |type|
eval(<<-eomethod)
def new_#{type}
get_feed['#{type}']['count']
end
eomethod
end

Таким чином ми згенерували 9 нових методів для класу Vkontakte.

Немає коментарів: