Я ищу в чей-то код и обнаружил, что он сделал класс Eval с чем-то вроде этогоНужна помощь, чтобы понять кусок кода
self.class_eval("@default_robot_engine = RobotEngine.new(some_block)")
, а затем к ней обращаются как этот
self.class_eval("@default_robot_engine")
Мне нужна помощь, чтобы понять этот код. Есть ли другой способ доступа к @default_robot_engine, а не к классу class_eval?
когда я Class.instance_variable_names я получаю
[ "@attribute_methods_mutex", "@generated_attribute_methods", "@generated_feature_methods", "@observer_instances", "@per_page", «@parent_name », " @registered_robot_engines", " @default_robot_engine", " @primary_key", " @quoted_primary_key", " @locking_column", " @attribute_methods_generated", " @TABLE_NAME", "@quoted_table_name", "@arel_table", "@arel_engine", "@relation", " @columns", " @column_names", "@columns_hash", " @cached_attributes", " @attribute_method_matchers_cache», „@generated_external_attribute_methods“]
и я в состоянии получить доступ ко всем переменную экземпляра, как этот ClassName.registered_robot_engine
кроме default_robot_engine
. Зачем?
Ok я получил ответ, потому что эта переменная экземпляра является динамичным и attr_reader не установлен на нем, так что я думаю, что единственный способ получить доступ к нему осуществляется через class_eval
условия: 'instance_variable_get()', 'instance_variable_set()', 'attr_accessor' – Zabba
Привет @Zabba Я обновил свой запрос. можете ли вы заглянуть в нее? –
@Zabba: Точно. Я написал ответ, прежде чем читать ваш комментарий, но +1 в любом случае. –