2012-09-11 81 views
2

我正在通過「學習Ruby困難的方法」,並且有關於調用對象內部方法的問題。我希望有人能夠對此有所瞭解。Ruby - 調用對象內部的方法並使用.call()

The code是:

def play() 
    next_room = @start 

    while true 
    puts "\n--------" 
    room = method(next_room) 
    next_room = room.call() 
    end 
end 

我知道while循環中這種方法是什麼使得在遊戲繼續其不同的領域。我的問題是,爲什麼room.call()必須先傳遞給next_room才能正常工作?爲什麼不只是做room.call()讓遊戲繼續到下一個領域?

我自己測試了一下,我不明白爲什麼它不能這樣工作。

回答

4

next_room是一個符號,它命名要調用的方法來確定下一個房間。如果我們看一下房間的方法之一,我們將看到這樣的事情:

def central_corridor() 
    #... 
    if action == "shoot!" 
    #... 
    return :death 

所以,如果你有@start = :central_corridor然後開始在playnext_room將開始:central_corridor和第一個迭代器的while循環是這樣這樣的:

room = method(next_room) # Look up the method named central_corridor. 
next_room = room.call() # Call the central_corridor method to find the next room. 

假設你選擇了拍攝時room.call()發生,那麼:death將在next_room結束。然後通過循環的下一次迭代將通過room = method(next_room)查找death方法並執行它。

method方法用於將next_room中的符號轉換爲方法,然後調用該方法以查找接下來會發生什麼。 接下來會發生什麼部分來自room的返回值。所以每個房間都用一個方法表示,這些方法返回表示下一個房間的方法的名稱。

+0

非常感謝您的深入解釋。我明白這是如何工作的! –

0

這是我創建的簡單代碼。在print語句的幫助下,我們可以看到什麼方法(next_room)和room.call()。

def printThis() 
    puts "thisss" 
end 

next_room = "printThis" 
print "next_room is: ", next_room; puts 


room = method(next_room) 
print "room is: ", room; puts 

room.call()