ruby TypeError - 没有将Fixnum隐式转换为String?
问题描述:
我试着去EVAL此功能,并出现ruby TypeError - 没有将Fixnum隐式转换为String?
此错误
类型错误 - Fixnum对象的隐式转换为字符串
eval("File.open('nagai.txt', 'a+') do |f| \n f. puts parts[" + params[:salutation].to_i + "] \n end")
我怎么能解决
答
此代码是非常有风险,而我首先看不到这样做的理由。取出eval
,你会得到这个非常普通的代码:
File.open('nagai.txt', 'a+') do |f|
f.puts parts[params[:salutation]]
end
这个错误来自试图串连一个Fixnum /整数到字符串构建你的代码,然后eval
的过程。此代码是无效的,并得到了同样的错误:
"1" + 1
红宝石并不像其他语言,如JavaScript,PHP或Perl其转换任意整数到字符串,反之亦然。两者之间存在很大的分隔,必须使用.to_s
或.to_i
之类的内容来指定任何转换。
该固定版本应该是等效的。如果你需要这个推迟到稍后的某个时间点,你可以写一个方法:
def write_nagai(params)
File.open('nagai.txt', 'a+') do |f|
f.puts parts[params[:salutation]]
end
end
不要那样做。你的代码很脆弱。 –
我能做什么来改善它 – zzero
我需要传递变量 – zzero