2017-04-25 92 views
0

我试着去EVAL此功能,并出现ruby​​ TypeError - 没有将Fixnum隐式转换为String?

此错误

类型错误 - Fixnum对象的隐式转换为字符串

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

我怎么能解决

+1

不要那样做。你的代码很脆弱。 –

+0

我能做什么来改善它 – zzero

+0

我需要传递变量 – zzero

回答

2

此代码是非常有风险,而我首先看不到这样做的理由。取出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 
+0

我相信它是反之亦然:'params [:salutation]'是一个传递给期望整数索引的数组的字符串实例。 – mudasobwa

+0

@mudasobwa现在我读了这段代码,我意识到这是一个试图连接字符串+整数+字符串,总是会产生错误的经典案例。哈希是一个红鲱鱼。奇怪的'eval'层增加了很多混乱。感谢您指出我没有将它固定在正确的位置。 – tadman

+0

非常感谢你这么帮助我 – zzero

相关问题