我可以从它的受让人那里获得变量名吗?

问题描述 投票:-1回答:1

是否有可能有一个类方法打印其父类被赋给的变量的名称?例:

class Test
  def who_am_I_assigned_to
    puts "#{??}"
  end
end

THIS = Test.new
THIS.who_am_I_assigned_to
# >> THIS
ruby
1个回答
0
投票

Technically yes, sort of.

但你必须递归搜索每个对象的所有instance_variables。而且,as Cary points out,一次可以将一个对象分配给多个变量。

Don't do that.

我正在寻找这种行为的原因是使用变量名称,但也作为数据网格中的位置。因此,如果有一个二维网格,变量名称将像“AA”,“AB”,“BC”等。它知道它的名称,它也知道它的位置。

你所描述的是一个"action at a distance" anti-pattern,其中程序的一部分的更改改变了程序的另一部分而没有明显的联系。这违反了封装;良好的封装使您只需查看其输入和输出即可了解系统的单个部分。违反封装意味着为了理解系统的某个部分,您必须了解系统的每个部分,从而导致维护噩梦。现代语言和实践力求尽可能避免这种情况。

例如,变量的名称应该对程序的行为无关紧要。您应该能够安全地执行Rename Variable refactoring,根据对象用户的意义命名变量。在您的示例中,这将改变违反Principle of Least Astonishment的程序的行为。

相反,你有一个对象代表你的网格,这将管理网格中节点之间的关系。而不是绕过单个节点,你将绕过网格。

或者每个节点都可以知道他们的相邻节点是谁。这方面的一个例子是传统的TreeGraphLinked List结构。这里的优点是没有固定的位置,数据结构可以在任何方向上增长或缩小。任何节点都可以传递,它知道它在结构中的位置。

© www.soinside.com 2019 - 2024. All rights reserved.