Использование локальных констант в Ruby - PullRequest
0 голосов
/ 02 апреля 2012

Кроме соглашения, есть ли причина использовать или не использовать локальные константы в рубиновых блоках или методах?

Например:

get '/documents/:id' do
  Doc_id = params[:id]
  ...
  ...
end

против

get '/documents/:id' do
  doc_id = params[:id]
  ...
  ...
end

Внутри блока это работает, но в методе вы получаете ошибку:

   def foo(bar)
      Foo = bar
      puts Foo.inspect
   end
   => SyntaxError: (irb):11: dynamic constant assignment

1 Ответ

0 голосов
/ 02 апреля 2012

Дело в том, что в случае метода вы фактически будете изменять константу при каждом вызове метода. Вы можете инициализировать такие константы только один раз. Это относится и к блокам. смотрите здесь:

m = [1, 2]
m.each do |t|
    DOC_id = 123
    DOC_id = 12
end

Тогда вы получите следующую ошибку:

(irb):12: warning: already initialized constant DOC_id
(irb):11: warning: already initialized constant DOC_id
(irb):12: warning: already initialized constant DOC_id

Доказательство того, что вы не можете переназначать константы даже в блоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...