2010-08-16 71 views
4

什么是红宝石的正确方法是从自身内部调用一个方法来重新运行 在当@dest_reenter等于下面的示例是我想的b_stage方法再次执行调用方法来执行再次

def b_stage 
    if @dest_reenter == 'yes' 
     @dest_reenter = nil 
     b_stage 
    end 
end 
+0

这是正确的事情是这样的书面。你对代码有任何问题吗? – jergason 2010-08-16 21:06:46

+3

顺便说一句,它被称为递归(http://en.wikipedia.org/wiki/Recursion) – 2010-08-16 21:16:33

+0

我在红宝石中使用这个概念,但执行不再发生。我怀疑这是否在ruby中有效 – veccy 2010-08-16 21:42:42

回答

6

这就是你如何做递归,但使用这些实例变量是不是要走的路。一个更好的例子是这样的:

def b_stage(i) 
    if i < 5 
     puts i 
     i += 1 
     b_stage(i) 
    end 
end 

如果调用b_stage(0),输出将是

0 
1 
2 
3 
4 
0

使用一个单独的方法:

def go 
    ... 
    middle_thing(true) 
end 

def middle_thing(first_time) 
    next_page unless first_time == true 
    parse_page 
end 

def parse_page 
    ...(parsing code) 
    middle_thing(false) 
end