2015-11-26 31 views
-1

我正在尋找最好的方法來實現最初來自Ruby中的PHP類的方法。該方法使用PHP的「靜態」關鍵字創建一個計數器,該計數器可以記住上次調用該函數時的值。移植使用「靜態」到Ruby的PHP迭代函數

function fetchRule() 
{ 
    static $index = 0; 
    $ret = null; 
    if(isset($this->rules[$index])) 
    { 
     $ret = $this->rules[$index]; 
    } 
    $index = $ret == null ? 0 : $index++; 
    return $ret; 
} 

正如你所看到的,規則是對象的一個​​數組成員。每次調用該函數時,都會獲得下一個規則,然後在最後返回null。我需要將其移植到ruby。可能有十幾種方法可以做到,但我希望能夠保持簡單。

回答

0

這裏純Ruby的方法。

def fetch_rule 
    @rule_index ||= 0 # An instance variable of the object which will be set only if @rule_index is nil 
    ret = @rules[@rule_index] # A local variable 

    # Increases the index or resets it to 0 if `ret` is nil. 
    @rule_index = (ret.nil? ? 0 : @rule_index++) 

    ret # Returns the value implicitly. WARNING! Returns nil if the method reaches the end of the Array! 
end 

我認爲你有一個小蟲子在上面的代碼,因爲你在每次調用重置$index0

您還應該查看TryRuby。從Ruby開始,這是一個很酷的教程。

+0

爲了理解如何使用$ index,您必須瞭解「靜態」變量在PHP中是如何工作的。 Ruby沒有這些,但這實際上不是一個錯誤。 $ index被設置一次並記住上一次調用的值。如果它有一個它不會重置它。因此它充當一個計數器 http://www.php.net/manual/en/language.variables.scope.php –