0

我的问题是我无法在 Ruby 中通过引用传递。我有两个功能searchingget_title_ids.

我有两个数组searching

(1) 标题 (2) href
需要更新

def searching
    title = []
    href = []
    (0..20).step(10) do |i|
        prev= title.length
        title, href = get_title_ids(i, title, href) ## <<-- Should have just done "get_title_ids(i, title, href)"
        ## something which on next iteration will increase the ids and hrefs
        puts "\nthe title lenght is #{title.length} and href length is #{href.length}\n"
        assert_operator prev,:<,title.length,"After scrolling to bottom no new jobs are getting added" 
    end
end

def get_title_ids (start_from=0, title=[], href=[])
    #Part of code which can store all links and titles of jobs displayed
    (start_from..(titles.length-1)).each do |i|
            unless titles[i].text.chomp
                title << titles[i].text.chomp
                href << titles[i].attribute("href")
            end     
        end
    end
    return [title, href] ### <<---- this is what messed it up
end

问题是我无法将push 元素添加到数组中title并且href已经在searching.

每次我打电话时get_title_ids,我都不想收集我以前收集的数据(因此是 start_form)。

我的问题不是记忆而是时间。所以我不太担心调用get_title_ids 函数时数据被复制,而不是我不得不浪费时间来报废我在前一个 for 循环中已经报废的数据。

任何人都知道如何在 Ruby 中通过引用破解通行证。

编辑

所以通过阅读下面的问题,我发现我不需要执行returnfrom get_title_ids。然后这一切都奏效了。

4

2 回答 2

2

ruby 中的数组肯定是按引用传递的(从技术上讲,它们是按值传递的,但该值是指向数组的指针)。观察:

def push_new ary
  ary << 'new element'
end

a = ['first element']
push_new a
a # => ["first element", "new element"]
于 2012-06-28T20:40:36.347 回答
1

即使引用类型的对象是按值传递的,它仍然是在引用内存中的同一个对象。如果不是这种情况,那么下面的示例将不起作用。

例子:

> def searching
>   title = []
>   href = []
>   test(title, href)
>   puts "Title: #{title.inspect} Href: #{href.inspect}"
> end

> def test(title, href)
>   title << "title1"
>   title << "title2"
>   href << "www.title1.com"
>   href << "www.title2.com"
> end

> searching

Title: ["title1", "title2"] Href: ["www.title1.com", "www.title2.com"]
于 2012-06-28T20:43:03.807 回答