質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Ruby

    7653questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • API

    1522questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • Bitcoin

    58questions

    Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

Rubyのプログラムを実行するとundefined method `>' for nil:NilClass (NoMethodError)と出ます

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 681

widget11

score 67

今流行りの仮想通貨を自動的に売り買いするプログラムをRubyの練習として書こうと思っています。
ひとまず練習として現在価格の上下を判別するプログラムを書いているのですがエラーが出てしまいます。

require './method'

while(1)
  current_price = get_price
  puts current_price

 if current_price > 2000000
    puts "現在の価格は200万円を超えています。"

   elsif current_price < 1900000
    puts "現在価格は190万を下回っています"

     else
     puts "現在の価格は190万と200万の間です"  

  end

  sleep(1)
end


同じディレクトリ内にあるmethod.rbというファイル内でget_priceというメソッドを書いており、apiを用いてbitcoinの現在価格を取得しており、requireしてこちらのファイルで使用できるようにしております。
特にこちらに関しては問題ないようでこのメソッドをcurrent_priceという変数に格納しputsすると現在価格が取得でき、ここまでは表示されます。
しかしその後のif文内の > 演算子が引っかかっているようでこのファイルを実行するとmacのコンソール画面には
undefined method `>' for nil:NilClass (NoMethodError)
と表示されてしまい、現在価格の価格から200万から上から下かを判別するプログラムが動きません。

nilに対して定義されてない > というメソットが使われているという意味なのでしょうが、正直普通に関係演算子である不等号を使っているだけなのでエラーになる理由が全くわかりません。
エラーの理由としては何が考えられるのでしょうか?よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

ウェブから拾った current_price の値は文字列だと思いますね。

提案

current_price = get_price.to_i

以上のようにやってみてください。

備考:もし、拾った数字は 10,000,000 というかたちの場合、カンマを削除してから .to_i してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/06 05:06

    初歩的なミスでした!お返信が遅れてしまい申し訳ございませんありがとうございます!

    キャンセル

0

>current_priceという変数に格納しputsすると現在価格が取得でき、ここまでは表示されます。

ループの1回目でも puts current_price は動くのでしょうか?

current_price = get_price をコメントアウトして
ループの外側で current_price = 1950000 と設定して
実行すると、
『1950000
現在の価格は190万と200万の間です』

が表示されますから、調べるとしたら、if文の構文ではないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

普通に関係演算子である不等号を使っているだけなので

Ruby は > などの演算子も実はメソッドとして実装されていて,

a > b

という式は a をレシーバーとし,b を引数とする > メソッドの呼び出しになるんです。

a.>(b)

と書くこともできます。(このコードの特別な書き方が a > b なんです)

なので,

 undefined method `>' for nil:NilClass (NoMethodError)

というエラーが出るなら > の左辺が nil であるとみて間違いないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    NoMethodErrorの解決法

    NoMethodError in Products#show undefined method `title' for nil:NilClass とエラーが出てしまいました。 p

  • 解決済

    NoMethodErrorの内容がよく理解できません

    前提・実現したいこと RPG用のキャラクター作成プログラムを作成しようとしています。 基本能力にボーナスポイントを割り振る機能である「assignment」メソッドを実装中に以

  • 受付中

    NoMethodError undefined methodのエラー

    NoMethodError in HomeController#index undefined method `id' for nil:NilClass とエラーが出ました。

  • 受付中

    NoMethodError についての質問

    NoMethodError in Articles#show undefined method `title' for nil:NilClass というエラーが出ました。 自分のコ

  • 解決済

    Ruby on RailsでNoMethodErrorが出ます

     前提・実現したいこと ドットインストールを見ながら第12回目(https://dotinstall.com/lessons/basic_rails_v3/41812)まで実際に作

  • 解決済

    Ruby on Railsの「NoMethodError」をどう解決すればいいでしょうか。

    Ruby on Railsを触り始めて一週間ほどの初心者です。 現在、Todoアプリを作っています。 Todoタスク一覧とDoneタスク一覧を一覧ページに表示して、各タスクに「

  • 解決済

    undefined method `[]=' for nil:NilClass (NoMethodE...

    サイト(https://www.virment.com/ruby-google-drive-readwrite/)を参考に以下のようなファイルを作成しました。 require

  • 解決済

    noMethodErrorについて

    表題のエラーが発生しております。 Rubyはほとんど触ったことがなく、簡単な質問で恐縮ですが @postを定義しているのでメソッドがない、未定義ではないと認識しているのですが、 @

同じタグがついた質問を見る

  • Ruby

    7653questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • API

    1522questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • Bitcoin

    58questions

    Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。