【发布时间】:2011-08-30 06:51:32
【问题描述】:
我相信 Ruby,有一种方法可以访问块内所有局部变量的名称。
def some_method(param1, param2)
p local_variables
end
每当调用“some_method”时,param1 和 param2 都会被打印出来。不是价值!但变量名。
现在,我想在 self.method_add 中实现相同的结果。
只要定义了一个方法,就会调用 self.method_added。我希望能够访问在 self.method_add 中定义的方法的局部变量的名称。例如,
def self.method_added(method_name)
#prints the variables names of the argument for method method_name
end
def do_something param1, param2
#crazy stuff
end
使用上面的代码,当 do_something 创建时,我想访问变量名“param1”和“param2”
有没有办法做到这一点?
【问题讨论】:
-
查看this answer 以及同一问题的其他答案。它没有提供获取方法中使用的所有局部变量名称的方法,但它允许您获取给定方法名称的参数名称。
-
请问您这样做的原因是什么?
-
我想为子类的方法创建一种方法,以根据变量的名称检查其变量的类型。所以你可以说 stringName.. 它会检查它是否是一个字符串。
-
那是相当违背红宝石哲学的。您应该使用鸭子类型来确保传递给方法的对象执行您想要的操作。我强烈推荐 Avdi Grimm 的演讲“Confident Code”,可在此处获取:confreaks.net/videos/614-cascadiaruby2011-confident-code
-
是的,我不这样做是因为我想遵循 Ruby 的哲学。我只是想看看我能不能做到。
标签: ruby metaprogramming