

Udemy講座でNoMethodErrorで躓いております  
current_priceにget_priceの値を代入して  
if文で条件分岐をしているのですが  
エラーになります  
current_priceに値が入っていないのでは？と思ったのですが  
プログラム起動後、puts current_priceにて  
値は表示されておりました  
原因を御教授願います  
環境はCloud9,ruby 2.4.0p0,Rails 5.1.4

[code]

    require './method.rb'
    
    while(1)
    current_price = get_price
    puts current_price
    if current_price > 450000
        puts "現在の価格は45万円を越えてます"
    elsif current_price < 400000
        puts "現在の価格は40万円を下回ってます"
    else
        puts "現在価格は40~45万円の間です"
    
    end
    sleep(1)
    end
    
    get_price
    order(side,price,size)
    get_balance(coin_name)
    
    test.rb:10:in `<main>': undefined method `>' for nil:NilClass (NoMethodError)
    
[/code]


CC BY-SA 3.0
2017-09-28T06:14:23.570
38256
2017-09-28T10:13:03.093
25574
question
ruby-on-rails
nil:NilClass (NoMethodError)


`get_price` が `nil` を返しており、nil は大小比較することができない (比較のメソッドを持っていない) ためです。

[code]

    nil == 100
    # => false
    nil > 100
    # => NoMethodError: undefined method `>' for nil:NilClass
    
[/code]

大まかには次のいずれかの処理を行うことになるでしょう。(これが全てでは無いですし、プログラムの目的によってよりふさわしい処理があるかもしれません。)

  1. `nil` の判定をして、メッセージを出力する・プログラムを終了するなどの処理を行う。(`current_price.nil?` で判定できます)
  2. `nil` の場合には、ふさわしいデフォルト値を代入する。(`current_price = get_price || 0` または `current_price = 0 if current_price.nil?` など。0がふさわしいかどうかはプログラムの目的によって異なります。)


CC BY-SA 3.0
2017-09-28T07:00:03.493
38257
2017-09-28T07:00:03.493
76
38256
answer


正しいか何故なのかは未だわかりませんが、get_priceのJSON形式のハッシュ変換で  
記述を変えたらClassがNilClassからFlootに変わり、条件分岐内でもnilならずに起動できました

（問題時）  
response_hash = JSON.parse(response.body)  
puts response_hash["mid_price"]

（訂正後）  
response_hash = JSON.parse(response.body)  
p response_hash["mid_price"]


CC BY-SA 3.0
2017-09-28T10:13:03.093
38267
2017-09-28T10:13:03.093
25574
38256
answer