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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

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

Bitcoin

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

API

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

Q&A

解決済

3回答

11175閲覧

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

widget11

総合スコア221

Ruby

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

Bitcoin

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

API

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

1グッド

1クリップ

投稿2017/12/21 00:15

今流行りの仮想通貨を自動的に売り買いするプログラムを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に対して定義されてない > というメソットが使われているという意味なのでしょうが、正直普通に関係演算子である不等号を使っているだけなのでエラーになる理由が全くわかりません。
エラーの理由としては何が考えられるのでしょうか?よろしくお願いいたします。

DrqYuto👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

提案

ruby

1current_price = get_price.to_i

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

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

投稿2017/12/21 07:21

netfish

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

widget11

2018/01/05 20:06

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

0

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

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

rb

1a > b

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

rb

1a.>(b)

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

なので,

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

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

投稿2017/12/21 03:38

scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

投稿2017/12/21 03:00

taro373

総合スコア189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問