This article的文档包含以下示例:
RestClient.get('http://my-rest-service.com/resource'){ |response, request, result, &block|
case response.code
when 200
p "It worked !"
response
when 423
raise SomeCustomExceptionIfYouWant
else
response.return!(request, result, &block)
end
}
您如何知道上面每个块变量可用的属性? response
,request
等分别具有哪些属性?当我运行rest_client
时:
response = RestClient.get('http://www.google.com')
许多内容都以response
的形式返回:
response.instance_variables # => [:@net_http_res, :@args, :@request, :@code]
response.net_http_res # => #<Net::HTTPOK 200 OK readbody=true>
response.args # => {:method=>:get, :url=>"http://www.google.com", :headers=>{}}
response.code # => 200
块response
的哪些部分可用?参数的顺序是否重要?
答案 0 :(得分:3)
通常,接受块的方法可选地会这样说:
def f(...)
if block_given?
...
yield thing1, thing2...
...
return foo
else
...
return bar
end
end
因此,不需要在块中产生什么与在没有阻塞的情况下返回的内容之间存在任何对应关系。
了解块接收内容的方法是查看方法的文档,或查阅源代码。
是的,订单很重要。 gem文档明确指出RestClient#get
为您提供response
,request
,result
和block
;它还描述了那些东西。
答案 1 :(得分:1)
来自process_result
中的restclient/request.rb
方法:
if block_given?
block.call(response, self, res, & block)
else
这是调用块的位置。由于self
此处为Request
,因此该块的参数为response
,request
,result
以及block
本身订购。
仅当block_given?
为真时才调用该块。因此,如果您在问题中显示,调用RestClient.get
没有阻止,会给它一个不同的行为。
该块可以获得哪些响应?
将整个Response
对象作为第一个参数提供给块。
参数的顺序是否重要?
是的,参数的顺序绝对重要。
答案 2 :(得分:0)
我不知道你拥有的特定宝石,但一般来说,检查课程:
p response.class
然后查找该类的文档,或直接查看它具有的方法:
p response.methods
答案 3 :(得分:0)
response = RestClient.get('http://www.google.com')
当您解雇此内容时,您可以为整个可用列表提供类似 response.methods 的内容。这个很大,所以请参考文档/ github页面,了解常用方法。所有方法的响应变量都可以直接使用和传递。
是的,参数的顺序很重要。