2013-05-11 70 views
0

我有一個快速的問題,可能歸結爲一些愚蠢的東西。我有一個擴展OAuth::AccessToken的類,並使用實例變量(@),以便每次構造一個對象時,這些變量將是唯一的那個實例。但是,當我嘗試從該類中返回最終對象時,出現錯誤。一個簡單的例子:Ruby快速類實例範圍

require 'oauth' 

class OauthFigshare < OAuth::AccessToken 
    def initialize (consumerkey, consumersecret, accesstoken, accesstokensecret) 
    @consumerkey = consumerkey 
    @consumersecret = consumersecret 
    @accesstoken = accesstoken 
    @accesstokensecret = accesstokensecret 
    @apiurl = "http://api.figshare.com" 

    @consumer = OAuth::Consumer.new(@consumerkey,@consumersecret,{:site=> @apiurl}) 
    @token = { :oauth_token => @accesstoken, :oauth_token_secret => @accesstokensecret} 

    puts @consumer.class 
    puts @token 


    @client = OAuth::AccessToken.from_hash(@consumer, @token) 
    puts @client 
    puts @client.get('/v1/my_data/articles') 
    return @client 
    end 
end 

問題是,當我檢查內部類看看如果令牌工作,它會。但是,當我在類之外檢查構造的對象時,它不起作用。

@client.get(url) returns Net::HTTPOk從類調用

auth = OauthFigshare.new(inputs) 
auth.get(url) 

這將返回Net::HTTPUnauthorized

什麼是我沒有得到有關範圍在這裏?

編輯以包括

+1

請在_Here中填寫更多的代碼,我會做xyz ..._小節。 – 2013-05-11 01:35:46

+0

我已經在課題中包含了實際的課程。 – user2276204 2013-05-11 01:42:12

回答

0

初始化方法的返回值,不使用實際的類。看起來你真的想重寫self.new。

+0

我的印象是所有的ruby塊都是返回值的表達式。那對初始化方法來說這不是真的嗎?我最初只是在構建客戶端的最後一行,假設它會返回該對象,但是當我遇到問題時,我想明確檢查。 – user2276204 2013-05-11 01:50:02

+0

我可以證實,如果我試圖將'initial.'方法更改爲'self.new',那麼我試圖將這兩個方法分開(這樣,只有在調用'new'時纔會調用'initialize'),這似乎打破了原始'new'方法的功能。 – user2276204 2013-05-11 02:02:30

+0

每個方法都有一個返回值,new是與initialize不同的方法。新的調用初始化但忽略了返回值。 – 2013-05-11 06:53:07