2015-09-17 3 views
0

У меня есть следующий код:как я могу создать экземпляр класса переменных в рубин

def self.test 
    # clear out all the other products so we have a clean slate 
    BF.delete_all_products 

    BF.puts_and_file("\n\n## ==== scenario #{@scenario_timestamp} =====\n\n") 
    BF.puts_and_file "endpoint: #{@baseUrl}" 

    @aggregating_PRP = BF.create_aggregating_rate_plan 

    pro_plan_id = BF.create_product(@create_pro_20_5_5)['id'] 
    biz_plan_id = BF.create_product(@create_biz)['id'] 

    @pro_20_5_plan = BF.create_rate_plan(pro_plan_id, @create_rate_plan_for_pro_20_5_5) 
    @biz_plan = BF.create_rate_plan(biz_plan_id, @create_rate_plan_for_biz_monthly) 
end 

Я хотел бы, чтобы заменить все эти @instance присвоения переменных, делая это:

def self.create_products 
    @aggregating_PRP = BF.create_aggregating_rate_plan 

    pro_plan_id = BF.create_product(@create_pro_20_5_5)['id'] 
    biz_plan_id = BF.create_product(@create_biz)['id'] 

    @pro_20_5_plan = BF.create_rate_plan(pro_plan_id, @create_rate_plan_for_pro_20_5_5) 
    @biz_plan = BF.create_rate_plan(biz_plan_id, @create_rate_plan_for_biz_monthly) 
end 

Но это Безразлично» похоже, работает. Переменные в методе create_products недоступны для других методов класса.

Я на самом деле не очень понятен, как работать с методами/классами и переменными в принципе.

+0

для уточнения. @aggregating_PRP должен быть доступен любому методу класса, который я вызываю в 'test' – Angela

ответ

0

Переменные экземпляра (с одним @) в методах класса или экземпляр eval для класса хранятся в классе.

class Book 
    def self.default_opts=(opts) 
    @default_opts = opts 
    end 

    def self.reset_default_opts 
    @default_opts = {} 
    end 

    def self.default_opts 
    @default_opts || reset_default_opts 
    end 

    def initialize(opts) 
    @opts = self.class.default_opts.merge(opts) 
    end 
end 

Book.instance_variables # => [:@default_opts] 
+0

Хм, похоже, он не ведет себя так. '@ default_opts' не появляется в последующих методах. – Angela

+0

Хм. Не могли бы вы опубликовать суть своего кода, или вы, возможно, имеете его в публичном репо? Это может быть проблема с загрузкой. Вы как-то автоматически загружаете класс? – jphager2

Смежные вопросы