![](/img/trans.png)
[英]TypeError - no implicit conversion of String into Integer in array Ruby on Rails
[英]Rails- upgrading to ruby 2.2.2 - no implicit conversion of Array into String (TypeError)
我一直在研究一个项目,该项目只是读取文件并将其解析以存储到数据库中。 项目运行正常,但是在更新ruby 2.2.2之后运行代码,我收到了以前没有的错误:
in `foreach': no implicit conversion of Array into String (TypeError)
这是导致错误的foreach
的代码段:(让我知道是否需要更多代码)。
def parse(file_name)
File.foreach(file_name).with_index do |line, line_num|
puts "\nLine #{line_num}: #{line}"
有人知道发生了什么吗? 谢谢
编辑:抱歉,这是一个片段! 我将此红宝石代码称为“ parse_log_file_test”,称为“ parse_log_file_test”
require File.dirname(__FILE__) + '/../test_helper'
class ParseLogFileTest < ActiveSupport::TestCase
filename = Array.new
Dir.glob('database/oag-logs/*.log').each do |log_file|
filename.push(log_file)
end
parser = ParseLogFile.new
parser.parse(filename)
test 'parse' do
parser = ParseLogFile.new
filename.each do |log_file|
begin
parser.parse(log_file)
rescue
puts"ERROR: Unable to parse line #{log_file}"
end
end
assert true
end
end
我猜想您省略了函数的end
,但是如果您没有它,那就需要它。
此错误表明传递给file_name
进行parse
的参数是数组而不是字符串。
但是,在这种情况下,它在Ruby 1.8.4上失败了:
File.foreach([]).with_index do |line, line_num|
puts "\nLine #{line_num}: #{line}"
end
输出:
TypeError: can't convert Array into String
from (irb):1:in `foreach'
from (irb):1:in `with_index'
from (irb):1
from :0
因此,我的猜测是,生成传递给您的值以进行parse
的代码在您先前的Ruby版本中返回了一个字符串,并在2.2.2中返回了一个数组。
在您的情况下,该错误是由parser.parse(...)
在test 'parse' do
行上方parser.parse(...)
的第一次调用引起的,而不是由test方法内部的调用引起的。 我猜您是在迁移后将调用放在那儿,可能是为了调试问题。 但是,您传递给第一个调用的参数与传递给测试方法内部的调用的参数不同,因此,失败的原因与测试方法中的调用原因不同。
要查看测试内部导致的错误,只需删除以下行
rescue
puts"ERROR: Unable to parse line #{log_file}"
(保留end
否则您也必须删除begin
。)
这样,错误将命中测试运行器,该运行器通常会显示该错误,包括消息和堆栈跟踪。
同意上面的海报,您很可能会丢失引号。 但是,它与2.2.2无关,可能这次您复制文件名的方式有所不同。
因此,显然,这是在Windows上升级到ruby 2.2.2的问题。 经过这个错误后,我只遇到了更多的错误.. nokogiri..etc
我最近有一台Mac,错误消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.