Переменная экземпляра в Ruby сбрасывается как ноль - PullRequest
0 голосов
/ 17 октября 2019

Мои переменные экземпляра возвращаются к нулю, даже если они установлены в отдельной вызываемой функции.

Я пытался распечатать значения до и после переменной экземпляра и видел, гдеполучается ноль. Это довольно загадочно, хотя. Прикрепление примера (https://repl.it/repls/FirebrickPresentKeyboard) также ниже:

class Test
  def process 
    return if a.nil? && b.nil?
    puts @some
  end

  def a
    @some = nil
    return true
  end

  def b
    @some = "abc"
    return false
  end

end

class Test2
  def process 
    return if c.nil?
    puts @hello
  end

  def c
    @hello = "hello"
    return true
  end
end

t = Test.new
t.process

t2 = Test2.new
t2.process

В классе Test я ожидаю, что @ some выведет «abc», так как оно установлено во время «b»"function. Тем не менее, он печатает ноль.

В классе Test2 я ожидаю, что @ hello выведет" hello ", и это определенно произойдет.

1 Ответ

1 голос
/ 17 октября 2019

В этом примере ваш метод b никогда не выполняется: && возвращает свой первый аргумент, если он ложный. В противном случае он оценивает и возвращает свой второй аргумент. Поскольку a.nil? оценивается как false, второе выражение никогда не вызывается.

Попробуйте это:

  def process 
    return if a && b
    puts @some
  end
...