ruby TypeError - 没有将 Fixnum 隐式转换为 String?

ruby TypeError - no implicit conversion of Fixnum into String?

我正在尝试评估此函数并出现

这个错误

TypeError - 没有将 Fixnum 隐式转换为 String

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/Integer 连接到字符串 eval。此代码无效并产生相同的错误:

"1" + 1

Ruby 不像其他语言,例如 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