加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是否可以在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>

方法返回传入符号的Method对象,__ method__返回当前方法的名称,Method#参数返回描述方法接受的参数的数组.这里我只设置具有类型的参数:key(名为params).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读