无法理解这个问题
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的新手
答案 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_name
比camelCaseVariabelName
更受欢迎
答案 2 :(得分:3)
请参阅Array::new
它接收整数,然后是一个对象,或者一个数组,所以你可以使用:
Array.new(2,'some') => ['some','some']
Array.new(an_array_here)
答案 3 :(得分:2)
混淆来自于在Ruby中构建数组的方法有很多种。非详尽列表包括:
[]
。每种语义各不相同。你这样做的方式有以下特征:
数组#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