簡體   English   中英

是否可以在Ruby中訪問關鍵字參數作為哈希?

[英]Is it possible to get access to keyword arguments as a Hash in 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

但我想使用關鍵字參數來更清楚地說明哪些哈希鍵方法可以接受(並且驗證說不支持此密鑰)。

所以我可以寫:

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

輸出:

#<A:0x007fd7e21008d0 @param1=20, @param2=23>
#<A:0x007fd7e2100218 @param1=3, @param2=4>

method返回傳入符號的Method對象, __method__返回當前方法的名稱, Method#parameters返回描述方法接受的參數的數組。 這里我只設置具有類型的參數:key (名為params)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM