Технически, да, вроде.
Но вам придется рекурсивно искать по instance_variables каждого объекта.И , как указывает Кэри , объект может быть назначен более чем одной переменной за раз.
Не делайте этого.
Причина, по которой я искал это поведение, заключалась в том, чтобы использовать имя переменной, но также в качестве позиции в сетке данных.Таким образом, если бы имелась двумерная сетка, имена переменных были бы похожи на «AA», «AB», «BC» и т. Д. Она знала, что ее имя также знало бы ее положение.
То, что вы описываете, - это антишаблон "действие на расстоянии" , где изменения в одной части программы изменяют другую часть программы без очевидной связи.Это нарушает инкапсуляцию;Хорошая инкапсуляция позволяет вам понять отдельную часть системы, просто взглянув на ее входы и выходы.Нарушение инкапсуляции означает, что для понимания одной части системы вы должны понимать каждую часть системы, ведущую к кошмару обслуживания.Современные языки и практики стремятся максимально этого избегать.
Например, имя переменной никогда не должно иметь значения для поведения программы.Вы должны быть в состоянии безопасно выполнить рефакторинг Rename Variable для именования переменной в соответствии с тем, что имеет смысл для пользователя объекта.В вашем примере это изменит поведение программы, нарушающей Принцип Наименьшего Удивления .
Вместо этого у вас будет объект, представляющий вашу Сетка, и это будет управлять отношениями между Узлами всетки.Вместо того, чтобы обгонять отдельные Узлы, вы должны обойти Решетку.
Или каждый Узел может знать, кто является их соседними Узлами.Примером этого может служить традиционная структура Tree , Graph или Linked List .Преимущество здесь в том, что нет фиксированной позиции, и структура данных может расти или уменьшаться в любом направлении.Любой узел можно обойти, и он знает свое положение в структуре.