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