是否有可能有一个类方法打印其父类被赋给的变量的名称?例:
class Test
def who_am_I_assigned_to
puts "#{??}"
end
end
THIS = Test.new
THIS.who_am_I_assigned_to
# >> THIS
但你必须递归搜索每个对象的所有instance_variables。而且,as Cary points out,一次可以将一个对象分配给多个变量。
我正在寻找这种行为的原因是使用变量名称,但也作为数据网格中的位置。因此,如果有一个二维网格,变量名称将像“AA”,“AB”,“BC”等。它知道它的名称,它也知道它的位置。
你所描述的是一个"action at a distance" anti-pattern,其中程序的一部分的更改改变了程序的另一部分而没有明显的联系。这违反了封装;良好的封装使您只需查看其输入和输出即可了解系统的单个部分。违反封装意味着为了理解系统的某个部分,您必须了解系统的每个部分,从而导致维护噩梦。现代语言和实践力求尽可能避免这种情况。
例如,变量的名称应该对程序的行为无关紧要。您应该能够安全地执行Rename Variable refactoring,根据对象用户的意义命名变量。在您的示例中,这将改变违反Principle of Least Astonishment的程序的行为。
相反,你有一个对象代表你的网格,这将管理网格中节点之间的关系。而不是绕过单个节点,你将绕过网格。
或者每个节点都可以知道他们的相邻节点是谁。这方面的一个例子是传统的Tree,Graph或Linked List结构。这里的优点是没有固定的位置,数据结构可以在任何方向上增长或缩小。任何节点都可以传递,它知道它在结构中的位置。