gpt4 book ai didi

ruby - 允许 Ruby 1.9 的散列语法吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:36 25 4
gpt4 key购买 nike

虽然我使用 Ruby 1.9 有一段时间了,但我最近才发现现在支持的更新的哈希语法:

settings = {
host: "localhost",
port: 5984
}

相对于:

settings = {
"host" => "localhost"
}

我喜欢它与 JavaScript 的对象表示法的相似性,并且看起来有点像 JSON,所以我可能会转而在我的所有库中使用它,但我仍然想支持其他用户和我自己的项目,它们采用旧语法.

所以这真的归结为一个相当简单的问题,即必须同时测试符号和字符串。有没有一种简单的方法可以将这两行作为一个来完成?

return true if settings["host"] and settings["db"]

return true if settings[:host] and settings[:db]

最佳答案

即使在 Ruby < 1.9 中,您也可以使用符号作为键。例如:

# Ruby 1.8.7
settings = { :host => "localhost" }
puts settings[:host] #outputs localhost
settings.keys[0].class # => Symbol

Ruby 1.9 改变了创建散列的方式。它获取 key 并将其转换为您的符号,同时消除了对哈希火箭的需要。

# Ruby 1.9.2
settings = { host: "localhost" }
settings[:host] # => "localhost"
settings.keys[0].class # => Symbol

在这两种情况下,如果我尝试使用 settings["name"] 访问 settings[:name],我将得到 nil。 Ruby 1.9 所做的只是允许一种创建散列的新方法。要回答您的问题,据我所知,如果您想向后兼容 Ruby 1.8,则不能使用新的 {key: value} 语法。

关于ruby - 允许 Ruby 1.9 的散列语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8220195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com