@options = { query: {site: service, page: page} }
这是做什么的?在javascript中,我认为是对象定义,但是我无法找到它在ruby中的确切含义。这将是完整的代码:
class StackExchange
include HTTParty
base_uri 'api.stackexchange.com'
def initialize(service, page)
@options = { query: {site: service, page: page} }
end
def questions
self.class.get("/2.2/questions", @options)
end
def users
self.class.get("/2.2/users", @options)
end
end
答案 0 :(得分:4)
这是hash。
Hash是一个类似字典的唯一键及其值的集合。也称为关联数组,它们类似于数组,但是当数组使用整数作为索引时,哈希允许您使用任何对象类型。
哈希非常类似于javascript中的对象文字。 最初的哈希使用了一种特殊的“hashrocket”语法:
hash = {
:a => 1
}
Ruby 1.9为您的密钥全部symbols时引入了另一种语法形式。这看起来很像一个javascript对象文字(这可能不是偶然的):
hash = {
a: 1,
b: 2
}
与Javascript对象不同,Ruby Hashes仅使用方括号表示法:
hash[:a]
答案 1 :(得分:2)
@options = { query: {site: service, page: page} }
转换为:
@options = {
:query => {
:site => service,
:page => page
}
}
这是1.9中引入的新Hash语法
答案 2 :(得分:1)
@options
是具有嵌套哈希的哈希文字。实例化时,StackExchange
类需要两个参数,一个页面和一个服务。
如果您要调用@options[:query]
,它将返回{site: :service, page: :page}
的内部哈希值。这只是一种以帮助用户理解它的方式存储不同数据的组织方式。
如果您有兴趣,请阅读几篇文章:
http://ruby-doc.org/core-2.1.5/Hash.html - 红宝石哈希上的文件
https://softwareengineering.stackexchange.com/questions/187457/what-is-the-principle-of-least-astonishment - 这是一个很好的讨论,讨论不同的命名约定。
答案 3 :(得分:0)
代码创建一个哈希(就像在javascript中一样)并将其分配给options
实例值。
> options = { query: {site: :service, page: :page} }
=> {:query=>{:site=>:service, :page=>:page}}
> options.class
=> Hash