簡體   English   中英

Ruby定義方法中關鍵字參數的哈希值上的splat運算符

[英]splat operator on hash for keyword arguments in ruby method definition

我有這樣的課:

class AwesomeService
  attr_reader :a, :b

  def initialize(a: 30, b: 40)
    @a = a
    @b = b
  end
end

我正在嘗試做這樣的事情:

class AwesomeService
  DEFAULTS = {
    a: 30,
    b: 40
  }

  attr_reader *DEFAULTS.keys

  def initialize(**DEFAULTS)
    @a = a
    @b = b
  end
end

這樣我就可以將默認值保留在單獨的哈希中。

但是我得到了錯誤:

SyntaxError ((irb): syntax error, unexpected tCONSTANT, expecting ')')
  def initialize(**DEFAULTS)
                   ^~~~~~~~

似乎初始化中的splat運算符無法正常工作。 但這似乎是合乎邏輯的做法。 我在這里做錯了什么?

是的...那不是您可以做的。

**foo在參數列表中是您如何收集 kwargs哈希的方法,因此也不能成為您注入kwargs哈希的方法。

更重要的是,kwargs的要點是它們將散列分解為局部變量-如果它在運行時擴展散列,則該散列將不起作用。

您能得到的最接近的是:

def initialize(**values)
  values = DEFAULTS.merge(values)
  raise "..." unless (values.keys - DEFAULTS.keys).empty?
  @a = values[:a]
  @b = values[:b]
end

暫無
暫無

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

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