Поведение local_variables - кто-нибудь может объяснить? - PullRequest
1 голос
/ 11 ноября 2010

просто любопытно, почему я не могу удалить объявленную локальную переменную из массива 'local_variables'.

Пример:

x=1
myarr = local_variables.clone
p local_variables
=> [:x, :_]
p myarr
=> [:x, :_]
p local_variables.class
=> Array
p myarr.class
=> Array
myarr.delete :x
p myarr
=> [:_]
local_variables.delete :x
p local_variables
=> [:x, :_]

WTF?

Я подозревал вызов local_variables.delete с параметром: x переустанавливает его обратно, так как он объявлен заново.Но если вызывается с другим ранее необъявленным символом, это не меняет его:

p local_variables
=> [:x, :_]
local_variables.delete :whatever
p local_variables
=> [:x, :_]

Может кто-нибудь объяснить?

Thx.

Ответы [ 3 ]

5 голосов
/ 11 ноября 2010

local_variables возвращает массив, содержащий имена всех объявленных в настоящее время локальных переменных.Вы можете делать все что угодно с этим массивом, но это, очевидно, не повлияет на то, какие локальные переменные объявлены.С чего бы это?Если вы вычеркните имя из телефонной книги, этот человек умрет?

4 голосов
/ 11 ноября 2010

Рассмотрим следующий метод:

def foo
  [42, 23, 13]
end

foo #=> [42, 23, 13]
foo.delete 23
foo #=> [42, 23, 13]

Вас это поведение удивляет?

Каждый раз, когда вы вызываете local_variables (или foo), создается новый массив.Если вы измените этот новый массив, который не повлияет на то, что произойдет, если вы снова вызовете local_variables.

0 голосов
/ 11 ноября 2010

AFAIK невозможно удалить переменные:

http://programming.itags.org/ruby/64695/

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