通常从Ruby对象获取值?

通常从Ruby对象获取值?,ruby,oop,Ruby,Oop,我经常遇到这样或类似的问题,我想了解从对象获取值背后的思维过程,这样我就能解决类似的问题 如果你有一个类似的例子来说明这一点,那么这只是一个好例子 问题: 如何获取内容长度的值 你是如何找到解决方案的 如果我做了pp res,那么我得到了 #<HTTP::Message:0x0055ab1ef42738 @http_body= #<HTTP::Message::Body:0x0055ab1ef42698 @body= "...", @chunk_size=n

我经常遇到这样或类似的问题,我想了解从对象获取值背后的思维过程,这样我就能解决类似的问题

如果你有一个类似的例子来说明这一点,那么这只是一个好例子

问题:

如何获取内容长度的值

你是如何找到解决方案的

如果我做了pp res,那么我得到了

#<HTTP::Message:0x0055ab1ef42738
 @http_body=
  #<HTTP::Message::Body:0x0055ab1ef42698
   @body=
    "...",
   @chunk_size=nil,
   @positions=nil,
   @size=0>,
 @http_header=
  #<HTTP::Message::Headers:0x0055ab1ef42710
   @body_charset=nil,
   @body_date=nil,
   @body_encoding=#<Encoding:ASCII-8BIT>,
   @body_size=0,
   @body_type=nil,
   @chunked=false,
   @dumped=false,
   @header_item=
    [["Connection", "close"],
     ["Content-Type", "text/html"],
     ["Content-Length", "291"]],
   @http_version="1.1",

我不知道您正在使用哪个库,但您可以简单地使用脏实例变量:

arr = res.instance_variable_get(:@http_header).instance_variable_get(:@header_item)
现在,只需在数组中搜索:

arr.find { |a| a.first == 'Content-Length' }.last
#=> "291"

我不知道您正在使用哪个库,但您可以简单地使用脏实例变量:

arr = res.instance_variable_get(:@http_header).instance_variable_get(:@header_item)
现在,只需在数组中搜索:

arr.find { |a| a.first == 'Content-Length' }.last
#=> "291"

不幸的是,你没有告诉我们那个物体是什么。我最好的猜测是它是一个来自宝石的物体。如果是这种情况,则使用以下方法获取内容长度标题:


不幸的是,你没有告诉我们那个物体是什么。我最好的猜测是它是一个来自宝石的物体。如果是这种情况,则使用以下方法获取内容长度标题:


挖掘对象的内部通常不是一个好主意。相反,您应该检查对象的文档,并尽可能使用其公共接口。通常,类并不保证它们的内部表示。任何更新都可以以任何方式改变这一点,而通过公开方法的外部接口通常会保持稳定。挖掘对象的内部通常不是一个好主意。相反,您应该检查对象的文档,并尽可能使用其公共接口。通常,类并不保证它们的内部表示。任何更新都可以以任何方式改变这一点,而通过公开方法的外部接口通常会保持稳定。