当返回数组中的项列表时,我得到Errno :: EINVAL:Textmate中的参数无效 - 但不是IRB

时间:2012-04-18 22:45:25

标签: ruby nokogiri textmate

查看以下更新

所以这是我的代码:

def add_category(new_url)
    new_url + '/web/'
end

url = 'http://www.someurl.com'

def modify_my_list(list)
    puts "The number of links in this list are: #{list.count}"
    list.each do |i, k|
          k = add_category(k)
              puts k
    end
end

modify_my_list(list)

基本上我正在做的是浏览特定网址上的链接列表并对其进行处理。

但我看到的输出(即链接列表)比我所知道的要少。

换句话说,我的屏幕上打印的链接数量少于list.count打印的数量。

这是我得到的错误:

Errno::EINVAL: Invalid argument

method write    in my-search.rb at line 83   =>     puts k
method puts in my-search.rb at line 83
method modify_my_list   in my-search.rb at line 83
method each in my-search.rb at line 81   =>     list.each do |i, k|
method modify_my_list   in my-search.rb at line 81
at top level    in my-search.rb at line 87 => modify_city_list(list)

思想?

更新

当我执行puts list.inspect时,它输出整个数组并且不会抛出错误。一旦我开始遍历数组,错误似乎就出现了。

更新2

所以当我在Textmate中运行它时遇到此错误。但是,我从list.inspect获取了输出并在IRB中完成了。然后我修改了IRB中的列表元素,它的工作原理没有给我一个错误。可能是Textmate抛出这个错误而不是Ruby或我的脚本吗?

2 个答案:

答案 0 :(得分:2)

你在列表中传递了什么?

我认为应该是

list.each do |k|

list.each_with_index do |k, i|

如果list是二维数组,则代码的简化版本为:

b = [['a1','b1'], ['a2','b2']]

b.each do |k, v|
    v = v + 'xz'
    puts v
end

你可以在irb上试试看它是否适合你?

编辑:

你试过这个吗?

list.each do |k|
   k[1] = add_category(k[1])
   puts k[1]
end

答案 1 :(得分:1)

或许这样做更有意义:

urls = list.map{|url| url + '/web/'}