Есть время и место для метапрограммирования. Я думаю, что это широко упоминается в книгах по Ruby, потому что людям нравится хвастаться тем, что может сделать Ruby, чего не могут делать другие языки.
Метапрограммирование похоже на то, что вы не знаете японское слово «гамбургер» или «суп с лапшой», но знаете японское слово «этот, пожалуйста» («kore o kudasai») и уметь указывать на пункт меню , Это обеспечивает большую гибкость, но вам нужно больше контекста, чтобы точно знать, что делается.
Если вы создаете ActiveRecord, который позволяет вам делать find_by_foo
, тогда имеет смысл метапрограммирование.
Если вы пишете библиотеку тестирования мутаций, такую как zombie-chaser , или приложение тестирования характеристик, которое тестирует различные реализации Ruby, такие как Small Eigen Collider , тогда метапрограммирование имеет смысл.
Однако, если вы пишете приложение, то, как правило, вы должны заниматься не метапрограммированием, а простым программированием. Например, если вы используете instance_variable_set
в своем приложении, это скорее запах кода, чем показатель того, насколько вы опытны.
Смежные вопросы, которые вы, возможно, захотите прочитать, включают https://stackoverflow.com/questions/1236191/what-will-i-learn-from-metaprogramming-ruby и Онлайн-учебник по метапрограммированию Ruby и Метапрограммирование, сколько это слишком много? .
Я действительно рекомендую книгу "Метапрограммирование Ruby", потому что она не просто учит вас метапрограммированию, но и тому, как работает Ruby.