1

如果 ENV[] 是一个类似哈希的对象(根据http://ruby-doc.org/core-2.0/ENV.html),为什么我不能调用 .slice(*keys) 呢?将特定键值对从环境中提取到另一个哈希中的最佳方法是什么?

4

2 回答 2

4

因为哈希上没有 slice 方法。如果您想要 ENV 的密钥,您可以调用:

ENV.keys

如果您想将一个值复制到一个新的哈希值,您可以调用:

# ex. Copying over the PATH variable from ENV hash.
hash = {}
hash[:path] = ENV["PATH"]

有关 ruby​​ 哈希的更多信息,请阅读 hash 和 enumerable 的文档:

http://www.ruby-doc.org/core-2.0.0/Hash.html

http://ruby-doc.org/core-2.0.0/Enumerable.html

于 2013-10-03T04:20:38.743 回答
2

假设您有一组要获取的 env 变量的键:

keys_wanted = %w{key1 key2 etc}

使用values_at,zipHash[]

您可以使用values_at来获取相应值的数组:

values_wanted = ENV.values_at(*keys_wanted)

然后您可以将其与密钥一起压缩到一个新的哈希中:

Hash[keys_wanted.zip(values_wanted)]

使用select

这更简单一些,但缺点是必须在 keys_wanted 数组中搜索每个键。

ENV.select {|key| keys_wanted.include? key }

文档:

于 2013-10-03T05:21:40.937 回答