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、P.94)
それはそれを持っている!完璧に動作します、助けてくれてありがとう、男!クイック質問、しかし... "|| ="演算子は何をしますか?私は以前それを見たことがない。 – HarryE
これは '@mode = @mode || 0 'とは何か:' @ mode'が 'true'と評価された場合はそれをとります。 else(すなわち、 'false'または' nil'のとき)は、次の値(この場合は '0')をとります。ユニット化されたインスタンス変数は、最初の参照では 'nil'とみなされます。つまり、 '@mode'が設定されていない場合は、値 '0'をとります。設定されている場合(「0」、「2」など)、その値を維持します。 –