2014-10-08 3 views
4

В C вы можете использовать блоки операторов для изоляции локальных переменных из своей родительской области.Блоки области переменных Ruby

int foo() { 
    { 
     int a; 
    } 
    // Here `a` is no longer in the scope. 
} 

Но в Ruby следующее не удается проанализировать.

Есть ли уловка для выделения переменных в область действия Ruby?

+0

нотации для объявления строчного блока является 'начать ... end', а не' делать ... end'. – tadman

+3

В Ruby _scope_ ворота создаются по 3 ключевым словам .. 'def',' class' и 'module'. –

+0

https://www.cs.auckland.ac.nz/references/ruby/doc_bundle/Newcomers/ruby.html#blocks –

ответ

2

Следующие работы, но я подозреваю, что есть другие способы.

proc { 
    a = 5 
}.call 
3

Наиболее подходящий «внутренний объем» в большинстве случаев является отдельным методом. Обычно, если некоторые данные в течение определенного блока алгоритма не должны быть видимыми снаружи, стоит выделить этот блок в отдельный метод. И вполне возможно, что этот блок может стать хорошим аргументом.

As the docs state, все эти случаи, которые имеют свои собственные локальные переменные сферы:

  • proc{ ... } (и, следовательно, блоки в вызове методы)
  • loop{ ... } (метод, который принимает блок, такие же, как выше)
  • def ... end (реализация метода)
  • class ... end
  • module ... end
  • всей программа (это не имеет смысла в рамках вопроса, хотя)
Смежные вопросы