Ошибка синтаксиса модуля Ruby - PullRequest
1 голос
/ 22 февраля 2012

У меня есть несколько проблем с пониманием модулей в Ruby, в частности, как хранятся переменные.Проблема в том, что у меня вот что:

module Mod

  MODE = 0

  def Mod.beginSearch
    MODE = 2
  end
end

Я получаю синтаксическую ошибку, которая указывает мне на строку "MODE = 2".Мое окружение не скажет мне больше, чем это, поэтому я понятия не имею, что вызывает это.

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Переменная, начинающаяся с заглавной буквы, является константой в Ruby. Вы можете переназначить константу, но это заставит Ruby выдать предупреждение. Но не внутри метода:

"Ruby предполагает, что методы предназначены для вызова более одного раза; если бы вы могли назначить константу в методе, этот метод будет выдавать предупреждения при каждом вызове после первого. Так что это просто недопустимо". (Язык программирования Ruby, Д. Фланаган и Ю. Мацумото, 2008, с.94)

0 голосов
/ 22 февраля 2012

Попробуйте использовать переменные экземпляра (с @):

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 голосов
/ 22 февраля 2012

В Ruby переменные с заглавной буквой постоянны. Вы устанавливаете MODE в 0, но затем в методе beginSearch вы устанавливаете MODE в 2, что вы не можете сделать, поскольку MODE является константой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...