1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RubyでNoMethodError: undefined method 'all?' for "":String って言われたときの対処法

Last updated at Posted at 2017-02-10

#変数名の後に何かくっつけてみたらエラーでた!
っていう人向けの記事です。初心者向けです

自分のところで出てるエラーは
NoMethodError: undefined method all?' for "":String だったり NoMethodError: private method select' called for "":String
これのデバッグの仕方の一つの例です

なぜか失敗する

sample2.rb
if str.all?
 puts "空白がありませんでした"
end
=>NoMethodError: undefined method 'all?' for "":String

Ruby初心者だった自分が陥ったときは NoMethodErrorとか言ってるけどall?ってメソッドはあるじゃないか!リファレンスに書いてあるぞ!ってなってだいぶ迷いました

#デバッグ方法

sample3.rb
#まず、putsでstrの中身を確認してください。変数は期待しているものになっていますか?
puts str
=> ""      
#変数の中身何も入ってない!もっと前の行で間違えてるのが分かる
sample4.rb
#変数の型はメソッドと同じですか?
puts str.class  #strのクラスを確認
=> String
#strはString型になっている。 all?はArray型に使えるメソッドだからエラーが起きていることがわかる

後者の方で間違えやすく、デバッグに時間がかかったりします。このようなエラーがでてきたら使ってるメソッドと変数の型が一致しているのかを見てあげてください
リファレンス→https://docs.ruby-lang.org/ja/search/
あ、これ配列に使えるメソッドだからStringに使えないのかって分かると思います

インターンでコード書いてるなかでよくあったのが

sample5.rb
Article.first
=>NoMethodError: undefined method 'first' for Article:Module
#とか書いてあってclassみてみたら
Article.class
=>Module #ってでてきて、お前さんモジュールだったのか...

みたいなこともありました

ここまで見てきて、勘のいい人だったらclass使わなくても
エラー文見たら最後にModuleとかStringとかでてきてるじゃん!ってわかると思います。

1
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?