我是根据从API收到的response_header动态创建attr_readers和实例变量。
response_header哈希回复如下:
{
"server"=>"nginx",
"x-ua-compatible"=>"IE=edge,chrome=1",
"expires"=>"Thu, 01 Jan 1970 00:00:00 GMT",
"cache-control"=>"no-cache, must-revalidate",
"pragma"=>"no-cache",
"rate-limit"=>"1000",
"rate-limit-remaining"=>"986",
"rate-limit-reset"=>"1265",
"content-type"=>"application/json;charset=UTF-8",
"content-language"=>"en",
"transfer-encoding"=>"chunked",
"vary"=>"Accept-Encoding",
"date"=>"Fri, 23 Jan 2015 15:38:56 GMT",
"connection"=>"close",
"x-frame-options"=>"SAMEORIGIN"
}
此get被发送到名为ResponseHeader
class ResponseHeader
def initialize(options = {})
options.each do |key, value|
instance_variable_set("@#{key}", value)
self.send(:attr_reader, key)
end
end
end
除了rate-limit
,rate-limit-remaining
和rate-limit-reset
显然是从API返回的字符串这一事实之外,这项工作非常顺利。
我希望我的班级在这里变得聪明,并将这些值改为整数,但到目前为止我唯一能提出的方法感觉非常不重要。
基本上我正在转换为一个整数,然后返回一个字符串,看它是否等于原始值。
[8] pry(main)> "ABC".to_i
=> 0
[9] pry(main)> _.to_s
=> "0"
[10] pry(main)> _ == "ABC"
=> false
[11] pry(main)> "100".to_i
=> 100
[12] pry(main)> _.to_s
=> "100"
[13] pry(main)> _ == "100"
=> true
这是我唯一的选择吗?
答案 0 :(得分:2)
Ruby Integer
将字符串解析为整数,如果解析失败则引发错误:
i = Integer("123") #=> 1234
i = Integer("abc") #=> ArgumentError: invalid value for Integer(): "abc"
还可以解析二进制,八进制和十六进制:
i = Integer("0b10") #=> 2
i = Integer("010") #=> 8
i = Integer("0x10") #=> 16
要解析基数10,请提供基数:
i = Integer("010",10) #=> 10
要在字符串中匹配,请使用正则表达式:
s = "foo123bar"
i = s=~/-?\d+/ ? Integer($&,10) : nil #=> 123
要修补String
类,请定义一个新方法:
class String
def match_integer
self=~/-?\d+/ ? Integer($&,10) : nil
end
end
"foo123bar".match_integer #=> 123