2013-04-02 79 views
0

我有一個紅寶石腳本,我想在一個方法中封裝變量初始化/重置。我創建了下面的變量重置方法。 但在irb中,這種方法運行良好,但是當我運行如下方法後打印變量:initer。它沒有完成這項工作。紅寶石方法似乎不工作

def intiter 
    cntr = 0 
    rec = 0 
    timer = 0 
end 
+0

你是怎麼打印這些變量的?這樣做應該是非常困難的。我無法想象一種在intiter之外的方法。什麼工作不是它?最重要的是,你的問題是什麼?在運行如下方法之後打印變量時:' – sawa

+0

':initer。它沒有做這項工作。「意思是?請明確點。你的問題不清楚。你從哪裏調用方法,以便你沒有得到輸出? –

+3

您需要閱讀Ruby中的基本變量作用域和實例變量。這些變量只存在於方法內部,即使其他名稱存在於別處。這裏是我剛剛谷歌搜索,看起來像一個很好的介紹:http://www.techotopia.com/index.php/Ruby_Variable_Scope –

回答

4

您的方法只在initer範圍內設置局部變量;當該方法結束時,那些設置爲0的變量消失在以太網中。您需要引用類,實例或全局變量,以便從您的方法中設置它們。類變量以@@開頭,並由該類的所有實例共享;實例變量以@開頭,可以通過類的特定實例中的任何內容訪問;全局變量以$開頭,可以在程序中的任何位置使用,但可能會受到意外更改。不知道更多的代碼和你的整體設計是什麼,沒有更多的我可以幫助你。

編輯:我以前的鏈接是不是正確的部分。試試http://docs.ruby-doc.com/docs/ProgrammingRuby/html/tut_classes.html瞭解更多。

另外,why's (poignant) guide to ruby是好的...如果這是你的一杯茶,無論如何。我喜歡。

+0

如何創建我可以在腳本中使用的全局變量?像在bash中一樣? – Doublespeed

+0

Ruby中的全局變量前面加上'$',作爲'$ cntr'或'$ timer'。這些可以從程序中的任何地方訪問。通常不鼓勵使用全局變量來支持更好的體系結構,但如果它是一個小程序(或者你非常關注它們),它們應該沒問題。 – iamnotmaynard

1

def關鍵字開始一個新的scope,這意味着這裏定義的任何變量都是全新的,當end關鍵字被擊中就會被破壞。您正在創建這些變量的全新副本,將它們設置爲0,然後銷燬它們。原始變量永遠不會被觸及。