dポイントプレゼントキャンペーン実施中!

str = array1[m] + array2[n]
というように結合したいのですがエラーになります。
どうすればいいのでしょうか?

A 回答 (2件)

エラーの理由はちゃんとメッセージに書いてありますよ。



can't convert nil into String
nilをString(文字列)に変換できない

よって、どちらかがnilということで
・array1[m]が文字列ではない
・array2[n]が文字列ではない
に該当します。具体的には
・termがnil
・dic_trans_noun[n]がnil
のどちらか、あるいは両方です。

さらに、 a+b は a.+(b)であること、nilには+メソッドが定義されていないことから、「nil+文字列」ではNoMethodErrorになります。
TypeErrorにはなっている、ということは、「文字列+nil」なので
・dic_trans_noun[n]がnil
が原因です。

dic_trans_noun[n]がnil、ということは次の2通りが考えられます
・実際にdic_trans_nounのn要素にnilが代入されている
・nがdic_trans_nounの範囲外になっている

dic_trans_nounについての記述がここには無いので、どちらの理由かは不明です。

対処法ですが
・nilの場合は別の処理をする
・nilにならないようにdic_trans_noun、またはnを調整する
となります。どちらがこのプログラムに求められる仕様なのかは、現在の情報だけでは。私には判断できません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
nilのときは別の処理をするようにしました。

型変換みたいなものが必要かと思っていたのですが、
一部の要素だけが問題だったんですね。

お礼日時:2013/01/27 08:44

具体的なエラーメッセージは何でしょう?



通常なら、それで問題なく文字列の結合ができます。

・array1が配列ではない
・array2が配列ではない
・mがarray1の範囲外
・nがarray2の範囲外
・array1[m]が文字列ではない
・array2[n]が文字列ではない
あたりが予想できますが、エラーメッセージを読まなければ、どれに該当するか(または、別の要因なのか)、わかりません。

この回答への補足

回答ありがとうございます。
次のようなプログラムになっています。
1 ###
2 out_find_term = Array.new
3
4 sentence_array.each{|sentence|
5 out_find_term.push ""
6 out_find_term.push "###" + sentence
7
8 n = 0
9 dic_term_noun.each{|term|
10 if /\b#{term}/ =~ sentence then
11 out_find_term.push term #辞書にあれば配列に入れる
12 out_find_term.push dic_trans_noun[n]
13 out_find_term.push "\n"
14
15 end
16 n = n + 1
17 }
18

この11行と12行を
a = term + dic_trans_noun[n]
out_find_term.push a に変えたのですが
うまくいきません。



(out_find_termを出力したときに、1行になるように結合させたいのです)
エラーメッセージは「in `+': can't convert nil into String (TypeError)」です。

out_find_term.push(term + dic_trans_noun[n])に変えても同じです。

(補足、遅くなってすみません)

補足日時:2013/01/26 17:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!