我在Ruby中有幾個理解模塊,特別是如何存儲變量。我遇到的麻煩是這個;Ruby模塊語法錯誤
module Mod
MODE = 0
def Mod.beginSearch
MODE = 2
end
end
我得到一個語法錯誤,它指向我的行「MODE = 2」。我的環境不會告訴我,所以我不知道是什麼造成了這種情況。
我在Ruby中有幾個理解模塊,特別是如何存儲變量。我遇到的麻煩是這個;Ruby模塊語法錯誤
module Mod
MODE = 0
def Mod.beginSearch
MODE = 2
end
end
我得到一個語法錯誤,它指向我的行「MODE = 2」。我的環境不會告訴我,所以我不知道是什麼造成了這種情況。
嘗試使用實例變量(與@
):
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
以大寫字母開頭的變量在Ruby中是常量。你可以重新分配一個常量,但它會導致Ruby發出警告。但不是在一個方法中:
「Ruby假定方法的目的是多次調用;如果你可以在方法中分配一個常量,那麼該方法會在每次調用後發出警告,所以這個根本不允許「。 (Ruby編程語言,D.那根& Y.松本,2008年,第94頁)
就是這樣!完美地工作,謝謝你的幫助,男人!快速的問題,但...「|| =」運算符是做什麼的?我以前沒有見過。 – HarryE 2012-02-22 15:43:52
這意味着'@mode = @mode || 0',那麼:如果'@ mode'被評估爲'true',則取其;否則(即,當它是'false'或'nil'時),取下一個值(在這種情況下爲'0')。假設第一個參考單元化的實例變量爲「nil」。這意味着:如果未設置「@ mode」,則取值「0」;如果已設置(例如:'0','2'或其他),則保持其值。 – 2012-02-22 16:20:57