Ruby Array Issue - 无法将String转换为Integer

时间:2013-07-02 16:50:54

标签: ruby ruby-1.9.3

无法理解这个问题

nameTag = "div[class='designer_about'] a"
designsTag = "li[class='span-2']"
pullTags = Array.new(nameTag, designsTag)

错误:

designers_list_mirraw.rb:8:in `initialize': can't convert String into Integer (TypeError)
from designers_list_mirraw.rb:8:in `new'
from designers_list_mirraw.rb:8:in `<main>'

我是ruby的新手

6 个答案:

答案 0 :(得分:26)

正如juanpastas所提到的那样,Array::new(size,obj)期待一个数字和一个对象。您可以在链接到的教程中看到这一点:

names = Array.new(4, "mac")

names现在是一个"mac"四次的数组。

如果您打算使用以下两项创建数组:

pullTags = Array.[nameTag, designsTag]
# which is equivalent to
pullTags = Array[nameTag, designsTag]
# which are the more verbose versions of
pullTags = [nameTag, designsTag]

请参阅[](*args)

答案 1 :(得分:4)

Ary.new(length, item)是您需要一个数组在特定时间内具有相同项目重复的时间。这不是Array.new(item, item)。第一个参数表示所需的数组长度。

在您的情况下,您应该使用:

name_tag = "div[class='designer_about'] a"
designs_tag = "li[class='span-2']"
pull_tags = [name_tag, designs_tag]
顺便说一下,根据Ruby的惯例,snake_case_variable_namecamelCaseVariabelName

更受欢迎

答案 2 :(得分:3)

请参阅Array::new

它接收整数,然后是一个对象,或者一个数组,所以你可以使用:

Array.new(2,'some') => ['some','some']
Array.new(an_array_here)

答案 3 :(得分:2)

构建阵列的方法

混淆来自于在Ruby中构建数组的方法有很多种。非详尽列表包括:

  1. 致电Kernel#Array
  2. 致电Array#new
  3. 使用数组文字构造Array,例如[]
  4. 每种语义各不相同。你这样做的方式有以下特征:

      

    数组#new(size = 0,obj = nil)

    这意味着第一个参数是数组的大小,而不是数组元素本身。使用不同的调用来获得所需的结果。

答案 4 :(得分:1)

请参阅Array

nameTag = "div[class='designer_about'] a"
designsTag = "li[class='span-2']"

可以通过以下方式调用新方法:

Array.new # => []
Array.new(2) # => [nil,nil]
Array.new(2,designsTag) # =>["li[class='span-2']", "li[class='span-2']"]

或者要逐个添加元素,您可以使用push方法:

[ 1, 2 ] << "c" << "d" << [ 3, 4 ] #=> [ 1, 2, "c", "d", [ 3, 4 ] ]

答案 5 :(得分:0)

如果您有字符串项,也可以使用%W

> nameTag = "div[class='designer_about'] a"
# => "div[class='designer_about'] a" 
> designsTag = "li[class='span-2']"
# => "li[class='span-2']"
> %W(#{nameTag} #{designsTag}) 
# => ["div[class='designer_about'] a", "li[class='span-2']"]

参考http://www.zenspider.com/Languages/Ruby/QuickRef.html#arrays