2012-02-21 16 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

+0

これは '@mode = @mode || 0 'とは何か:' @ mode'が 'true'と評価された場合はそれをとります。 else(すなわち、 'false'または' nil'のとき)は、次の値(この場合は '0')をとります。ユニット化されたインスタンス変数は、最初の参照では 'nil'とみなされます。つまり、 '@mode'が設定されていない場合は、値 '0'をとります。設定されている場合(「0」、「2」など)、その値を維持します。 –

0

Rubyでは、大文字の変数は定数です。 MODEを0に設定しますが、方法beginSearchではMODEが定数であるため、MODEを2に設定します。

+0

'MODE = 1。 MODE = 2'は有効なRubyですが、警告が表示されます。 – steenslag

+0

@steenslag:しかし、この特定の構文は、構文エラーを引き起こします。 – mipadi

+0

確かに。これは、メソッド内ではなく定数を再割り当てできるためです。 – steenslag

1

大文字で始まる変数は、Rubyでは定数です。 は定数を再割り当てしますが、Rubyは警告を発します。しかし、メソッドの中にはありません:

"Rubyは、メソッドが複数回呼び出されることを前提としています;メソッド内の定数に割り当てることができた場合、そのメソッドは最初の呼び出しの後に呼び出されるたびに警告を出します。単に許可されていません。 (Rubyプログラミング言語、D.フラナガン& Y.松本2008、P.94)

関連する問題