2012-02-21 70 views
1

我在Ruby中有幾個理解模塊,特別是如何存儲變量。我遇到的麻煩是這個;Ruby模塊語法錯誤

module Mod 

    MODE = 0 

    def Mod.beginSearch 
    MODE = 2 
    end 
end 

我得到一個語法錯誤,它指向我的行「MODE = 2」。我的環境不會告訴我,所以我不知道是什麼造成了這種情況。

回答

0

嘗試使用實例變量(與@):

module Mod 
    def Mod.begin_search 
    # set @mode to 2. Instance variables are preserved among methods. 
    @mode = 2 
    end 
    def Mod.mode 
    # set @mode to 0 if it's not initialized yet. 
    @mode ||= 0 
    end 
    def Mod.time_for_search 
    # use Mod.mode to get @mode, granted it's set (0, 2 or whatever) 
    mode == 2 
    end 
end 

# Testing... 
puts Mod.mode 
#=> 0 

puts Mod.time_for_search 
#=> false 

Mod.begin_search 
puts Mod.mode 
#=> 2 

puts Mod.time_for_search 
#=> true 
+0

就是這樣!完美地工作,謝謝你的幫助,男人!快速的問題,但...「|| =」運算符是做什麼的?我以前沒有見過。 – HarryE 2012-02-22 15:43:52

+0

這意味着'@mode = @mode || 0',那麼:如果'@ mode'被評估爲'true',則取其;否則(即,當它是'false'或'nil'時),取下一個值(在這種情況下爲'0')。假設第一個參考單元化的實例變量爲「nil」。這意味着:如果未設置「@ mode」,則取值「0」;如果已設置(例如:'0','2'或其他),則保持其值。 – 2012-02-22 16:20:57

0

在Ruby中,使用大寫字母的變量是不變的。您將MODE設置爲0,但隨後在方法beginSearch中,您將MODE設置爲2,您無法這樣做,因爲MODE是一個常數。

+0

'MODE = 1; MODE = 2'是有效的Ruby,但你會得到一個警告。 – steenslag 2012-02-21 21:57:25

+0

@steenslag:然而,這個特殊的結構會導致語法錯誤。 – mipadi 2012-02-21 21:58:49

+0

確實。那是因爲你可以重新分配一個常量,但不能在一個方法內。 – steenslag 2012-02-21 22:04:20

1

以大寫字母開頭的變量在Ruby中是常量。你可以重新分配一個常量,但它會導致Ruby發出警告。但不是在一個方法中:

「Ruby假定方法的目的是多次調用;如果你可以在方法中分配一個常量,那麼該方法會在每次調用後發出警告,所以這個根本不允許「。 (Ruby編程語言,D.那根& Y.松本,2008年,第94頁)