在ruby中从自身获取实例变量名称

在ruby中从自身获取实例变量名称,第1张

概述我有一个实例变量@foo,我想写一些代码,以便我得到字符串’foo’ 任何提示? 如果您拥有的只是对象的引用,那么您无法干净利落地完成它. def foo bar @somethingenddef bar(value) value # no clean way to know this is @somethingend 我能想到的唯一的黑客是在自己上遍历所有实例变量,寻找匹配.但这 我有一个实例变量@foo,我想写一些代码,以便我得到字符串’foo’

任何提示?

解决方法 如果您拥有的只是对象的引用,那么您无法干净利落地完成它.

def foo  bar @somethingenddef bar(value)  value # no clean way to kNow this is @somethingend

我能想到的唯一的黑客是在自己上遍历所有实例变量,寻找匹配.但这是一个非常混乱的方法,可能会很慢.

def bar(value)  instance_variables.each do |ivar_name|    if instance_variable_get(ivar_name) == value      return ivar_name.to_s.sub(/^@/,'') # change '@something' to 'something'    end  end  # return nil if no match was found  nil end@something = 'abc123'bar @something # returns 'something'# But passing the same value,will return a value it's equal to as wellbar 'abc123' # returns 'something'

这是有效的,因为instance_variables返回一个符号数组,这些符号是实例变量的名称.

instance_variables#=> [:@something,:@whatever]

而instance_variable_get允许您通过它的名称获取值.

instance_variable_get :@something # note the @#=> 'abc123'

结合这两种方法,您可以接近您想要的.

只是明智地使用它.在使用基于此的解决方案之前,看看您是否可以通过某种方式重构事物,以便它不必要.元编程就像一门武术.你应该知道它是如何工作的,但要尽可能避免使用它.

总结

以上是内存溢出为你收集整理的在ruby中从自身获取实例变量名称全部内容,希望文章能够帮你解决在ruby中从自身获取实例变量名称所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1283368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存