是否可以在Ruby中访问关键字参数作为哈希?
我知道我能做到:
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
但我想使用关键字参数来更清楚地说明哪些哈希键方法可以接受(并且validation说不支持此密钥)。
所以我可以写:
class A def initialize(param1: 3, param2: 4) @param1 = param1 @param2 = param2 end end
但是有可能写一些更短的而不是@x = x; @y = y; ...
@x = x; @y = y; ...
@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
输出:
# #
method
返回传入符号的Method
对象, __method__
返回当前方法的名称, Method#parameters
返回描述方法接受的参数的数组。 这里我只设置具有类型的参数:key
(名为params)。