是否可以在Ruby中访问关键字参数作为哈希?
发布时间:2020-12-17 03:16:16 所属栏目:百科 来源:网络整理
导读:我知道我能做到: class Parent def initialize(args) args.each do |k,v| instance_variable_set("@#{k}",v) end endendclass A Parent def initialize(attrs) super(attrs) endend 但我想使用关键字参数来更清楚地说明哪些哈希键方法可以接受(并且验证说不
我知道我能做到:
class Parent def initialize(args) args.each do |k,v| instance_variable_set("@#{k}",v) end end end class A < Parent def initialize(attrs) super(attrs) end end 但我想使用关键字参数来更清楚地说明哪些哈希键方法可以接受(并且验证说不支持此密钥). 所以我可以写: class A def initialize(param1: 3,param2: 4) @param1 = param1 @param2 = param2 end end 但是有可能写一些更短的而不是@x = x; @y = y; …从传递的关键字参数初始化实例变量?是否可以将传递的关键字参数作为哈希访问? 解决方法
不是我建议使用的东西(因为eval!),但这是我能想到的唯一方法,因为我认为没有办法获得没有eval的局部变量的值.
class A def initialize(param1: 3,param2: 4) method(__method__).parameters.each do |type,name| if type == :key instance_variable_set "@#{name}",eval("#{name}") end end end end p A.new param1: 20,param2: 23 p A.new 输出: #<A:0x007fd7e21008d0 @param1=20,@param2=23> #<A:0x007fd7e2100218 @param1=3,@param2=4> 方法返回传入符号的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |