41365


Cloud9環境でRubyを使用して仮想通貨の自動売買botを作成していたところ以下のエラーを表示して困っています。

＜エラー内容＞

[code]

    undefined method `[]' for nil:NilClass (NoMethodError)
    
[/code]

＜該当部ソース＞

[code]

    #注文状況の確認
    def order_status
        flag = 0
        bbcc = Bitbankcc.new(API_KEY, API_SEC)
        while flag == 0 do
            response =  bbcc.read_active_orders('xrp_jpy')
            response_hash = JSON.parse(response)
            response_data = response_hash["data"]
            response_order = response_data["orders"]
            if response_order[0]["status"] == "FULLY_FILLED" then
                price = response_order[0]["price"]
                flag = 1
            end
        sleep(0.1)
        end
        return price
    end
    
[/code]

＜やりたいこと＞

`response_order[0]["status"]`の中身が`"FULLY_FILLED"`になるまでループさせたいだけです。  
response_orderの中身は下のようになっています。

[code]

    {"order_id"=>9408346, "pair"=>"xrp_jpy", "side"=>"sell", "type"=>"limit", "start_amount"=>"10.000000", "remaining_amount"=>"10.000000", "executed_amount"=>"0.000000", "price"=>"130.0000", "average_price"=>"0.0000", "ordered_at"=>1517417353070, "status"=>"UNFILLED"}
    
[/code]

Rubyどころかプログラミング自体が初心者で、なんとか独学で頑張ってきましたがお手上げ状態です。

稚拙なコードでお恥ずかしいのですがアドバイス頂ければ幸いです。


CC BY-SA 3.0
2018-01-31T18:27:39.390
41359
2018-02-01T01:33:02.007
2018-01-31T20:24:11.627
3068
27227
question
ruby
Rubyでundefined method `[]' for nil:NilClass (NoMethodError)


nilに対して[]を使ってアクセスしようとしたら出るerrorですね。

[code]

    > nil[0]
    NoMethodError: undefined method `[]' for nil:NilClass
    
[/code]

8～11行までに[]を使っていじろうとしていますが、そのうちのどれかで変数がnilのままいじろうとして怒られてます。

例えば、Hashから[]を使って値を取り出そうとされてますが、対象のkeyが無い場合nilが返ります。  
恐らく、key名の間違いか想定した構造のresponseが返ってきてないのではないかと思います。

これ以上は、実際にresponseで返って来た値が無いと回答できないと思います。


CC BY-SA 3.0
2018-02-01T01:33:02.007
41365
2018-02-01T01:33:02.007
2383
41359
answer