0
0

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 3 years have passed since last update.

Rubyのハッシュでno implicit conversion of symbol into integerがでたがintegerでなく自分のミスだった件について

Posted at

はじめに

今回は初のRubyの記事を書きたいと思います。
Rubyは記事がたくさんあるイメージですが、この問題の原因はみつからなかったため記事にします。
いろいろな言語をやっていたりすると起きるミスなのかなとも思いました。

問題

以下のハッシュを定義して"サイン"を表示しようとしました。

def subject
  {
    math: {
      sin: "サイン",
      cos: "コサイン",
      tan: "タンジェント",
    },
    science: {
      viology: "植物学",
      biology: "生物学",
    }
  }
}  
# サインと表示したい
select = subject[:math[:sin]]

すると以下のエラーが発生します。

no implicit conversion of symbol into integer

文字列にしろとでているので、subject["math"["sin"]]など確かめたが表示されませんでした。

解決策

そもそもハッシュの表示の仕方を間違っていました。
エラー文が原因を表していると思っていましたが、それ以前の問題でした。

以下のコードで動きました。

select = sebject[:math][:sin]
puts(select)

# サインと表示される

この原因によるエラーのほうが多いかも

先ほども述べましたが、このエラーが出た場合は多くは文字型で指定すると治るかと思います。

def subject
  {
    "math": {
      "sin": "サイン",
      "cos": "コサイン",
      "tan": "タンジェント",
    },
    "science": {
      "viology": "植物学",
      "biology": "生物学",
    }
  }
}  

# keyを文字型で定義している (ex "math"など)

エラー通り文字型でハッシュを表示します。

シンボルでなく文字列で指定しなければならないので以下のようにする

select = subject["math"]["sin"]

さいごに

エラーの内容に気を取られて、文字列にしたりシンボルにしたりを繰り返していましたが、まさかの表記の仕方自体が違っていたことにはなかなか気づきませんでした。リストやらハッシュやらわからなくなることがあります。エラー文を気にする前に表記が正しいか確認するのも大事です。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?