13. Метапрограммировани: eval — методы
В Ruby существует целых четыре eval-метода:
- eval — собственно традиционный eval.
- class_eval — eval, который выполняет код в контексте класса.
- instance_eval — eval, который выполняет код в контексте экземпляра класса.
- module_eval — eval, который выполняет код в контексте модуля.
Традиционно eval — это функция или метод, который принимает в качества аргумента строку, которую интерпретирует и выполняет как код. В Ruby, eval-методы могут принимать в качестве аргумента блок кода и выполнять его в определенном контексте.
Использование метода .eval считается плохим стилем поскольку использование .eval может нарушить безопасность приложения. Вместо .eval рекомендуется использовать другие, описанные выше eval-методы. Вообще рекомендуется, как и всему в этой жизни, знать меру с использованием eval-методов, поскольку они несколько запутывают код.