2013-03-30 3 views
7

с рельсов консоли:, как и когда Рубиновые переменные экземпляра

development environment (Rails 3.2.9) 
1.9.2p320 :001 > defined?(kol) 
=> nil 
1.9.2p320 :002 > if 1==2 
1.9.2p320 :003?> kol = 'mess' 
1.9.2p320 :004?> end 
=> nil 
1.9.2p320 :005 > defined?(kol) 
=> "local-variable" 
1.9.2p320 :006 > kol 
=> nil 

мой вопрос, почему же переменная kol получить экземпляр к nil даже если условие (1 == 2) терпит неудачу?

+0

'irb' работает по-разному относительно локальных переменных, чем интерпретатор, - будьте осторожны. – Linuxios

ответ

7

Это связано с тем, как интерпретатор Ruby считывает код.

Назначение переменной не обязательно должно выполняться; интерпретатор Ruby просто должен видеть, что переменная существует в левой части задания. (Программирование рубин 1,9 & 2,0)

a = "never used" if false 
[99].each do |i| 
    a = i # this sets the variable in the outer scope 
end 
a # => 99 

«Рубин интерпретатор создает переменную, даже если задание не выполняется на самом деле.» http://www.jacopretorius.net/2012/01/block-variable-scope-in-ruby.html

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