ruby – 动态获取变量值
发布时间:2020-12-16 19:23:35 所属栏目:百科 来源:网络整理
导读:我有以下课程 class User attr_accessor :name,:age,:address def initialize() self.name = "new user" self.age = 19 self.address = "address" end end 如果要有一个方法来获取属性的指定值,我想要什么.意思是,我有另一种方法来获取上面类中的所有方法名
我有以下课程
class User attr_accessor :name,:age,:address def initialize() self.name = "new user" self.age = 19 self.address = "address" end end 如果要有一个方法来获取属性的指定值,我想要什么.意思是,我有另一种方法来获取上面类中的所有方法名称 methods = self.public_methods(all = false) 我可以从中获取方法名称(我的意思是名称的getter等).我想要一种方法来传递该方法名称(我将它作为字符串)并获取方法的返回值 例如: 当我传递’name’作为方法名称时,我应该能够获得’新用户’作为值 希望我提前澄清问题 **请注意,我必须使用这种方式,因为我的类有很多属性,并且它有很多继承的类.因此,不可能单独访问每个attr:D 解决方法
这就是发送的目的:
user = User.new user.name # => "new user" user.send(:name) # => "new user" getters = user.public_methods(false).reject { |m| m =~ /=$/ } getters.each { |m| puts user.send(m) } 如果您没有访问器方法,则使用instance_variable_get是另一个选项: user.instance_variable_get(:@name) # => "new user" 使用public_methods获取属性列表可能很危险,具体取决于您如何确定要调用的方法.相反,您可以创建自己的类方法,该方法既定义访问器又存储属性名称以供将来使用: class User class << self attr_reader :fields def field (*names) names.flatten.each do |name| attr_accessor name (@fields ||= []) << name end end end field :name field :age field :address end user = User.new user.name = "Me" user.age = 22 user.address = "1234" user.class.fields.each do |field| puts user.send(field) end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |