是否可以在Ruby Hash中使用并行分配



鉴于它是一个不变的对象,Ruby允许等分分配:

sample[:alpha] = sample[:beta] = sample[:gamma] = 0

但是还有其他简单的方法可以做到吗?,类似:

sample[alpha:, beta:, gamma: => 0]

或:

sample[:alpha, :beta, :gamma] => 0, 0, 0 

首先,这无法正常工作:

sample = {}
sample[:alpha], sample[:beta], sample[:gamma] = 0

这将导致:

sample == { alpha: 0, beta: nil, gamma: nil }

要获得所需的结果,您可以使用并行分配:

sample[:alpha], sample[:beta], sample[:gamma] = 0, 0, 0

或,循环循环通过键分别分配每个键:

[:alpha, :beta, :gamma].each { |key| sample[key] = 0 }

或将原始哈希与您的新属性合并:

sample.merge!(alpha: 0, beta: 0, gamma: 0)

根据您实际要在这里尝试做的事情,您可能希望考虑为您的哈希提供默认值。例如:

sample = Hash.new(0)
puts sample[:alpha] # => 0
sample[:beta] += 1  # Valid since this defaults to 0, not nil
puts sample         # => {:beta=>1}

这个呢?

sample.merge!(alpha: 0, beta: 0, gamma: 0)

没有什么比您描述的东西那样,但是您可以用所有内容运行一个循环并分配值。

keys = [:alpha, :beta, :gamma, :theta, ...]
keys.each {|key| sample[key] = 0}

减少额外的击键数量,并且非常容易更改键阵列。

相关内容

  • 没有找到相关文章

最新更新