2017-04-25 6 views
0

イムは、この機能をevalにしようとruby​​ TypeError - Fixnumの暗黙的な文字列への変換はありませんか?

このエラー

例外TypeError表示されます - 私は解決できる方法を文字列

eval("File.open('nagai.txt', 'a+') do |f| \n f. puts parts[" + params[:salutation].to_i + "] \n end") 

にFixnumかの無い暗黙の型変換を

+1

このようにしないでください。あなたのコードは脆弱です。 –

+0

は、私はそれを私は変数は 'のeval()' – zzero

+0

を改善するために何ができます: 'params [:salutation]'は整数インデックスを期待する配列に渡される文字列インスタンスです。 – zzero

答えて

2

このコードは、極めてです危険で、私は最初にこれを行う理由を見ることができません。 evalを削除し、あなたは、この非常に一般的なコードを取得する:

File.open('nagai.txt', 'a+') do |f| 
    f.puts parts[params[:salutation]] 
end 

エラーがeval、コードあなたを構築する過程でStringにFixnumか/整数を連結しようとしてから来ています。このコードは無効であり、同じエラーが得られます。

"1" + 1 

Rubyはない、そのような任意の文字列とその逆に整数に変換するJavaScript、PHPやPerlなどの他の言語のようなものです。この2つの間には厳密な分離があり、変換には.to_s.to_iなどの指定が必要です。

固定バージョンは同等である必要があります。後でこれを延期する必要がある場合は、メソッドを書くことができます。

def write_nagai(params) 
    File.open('nagai.txt', 'a+') do |f| 
    f.puts parts[params[:salutation]] 
    end 
end 
+0

を取り外す必要がある代替感謝を探しましょう、同意する必要 – mudasobwa

+0

@mudasobwaこれで、このコードを読んだので、string + integer + stringを連結して、常にエラーを生成する古典的なケースです。ハッシュは赤いニシンです。奇妙な 'eval'レイヤーは多くの混乱を招きます。私はそれが右に固定されていなかったことを指摘してくれてありがとう。 – tadman

+0

非常に助かりました – zzero

関連する問題