Как установить локальную переменную, объявленную во вложенном методе, в область действия родительского метода? - PullRequest
0 голосов
/ 22 апреля 2019

У меня проблемы с областью действия Руби.

У меня есть метод 'foobar', в котором есть два метода.Я хочу, чтобы каждый из методов 'foobar' инициализировал переменную, которая может использоваться 'foobar'.

Ниже приведен мой код ошибки и код:

неопределенная локальная переменная или метод `old_var '

def initialize
    @sandbox = #working api call
end

def foobar

        @sandbox.function() do |resp|
             old_var = resp.var.to_f
        end

        sleep(10)

        @sandbox.function() do |resp|
             new_var = resp.var.to_f
        end

        new_var + old_var;

    end

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Установите результат процедуры равным old_var, чтобы он объявлялся в той же области, где использовался.

old_var = 
  @sandbox.function() do |resp|
    resp.var.to_f
  end

То же самое для new_var:

new_var = 
  @sandbox.function() do |resp|
    resp.var.to_f
  end

Как установить, чтобы локальная переменная, объявленная во вложенном методе, находилась в области действия родительского метода?

Отвечая на вопрос в заголовке: это невозможно.


Если вам необходимо выполнить некоторые действия перед возвратом значения из вложенного блока, используйте break:

value =
  @sandbox.function() do |resp|
    foo = 42
    # do something else
    break foo
  end
1 голос
/ 22 апреля 2019

Переменные, определенные внутри блока, относятся к блоку.Определите ваши переменные за пределами блока, а затем вы можете изменить их внутри блока.Это позволит вам получить к ним доступ после завершения блока.

def initialize
    @sandbox = #working api call
end

def foobar
    # defining these two variables so you can set them
    # inside the block later
    old_var = nil
    new_var = nil

    @sandbox.function() do |resp|
         old_var = resp.var.to_f
    end

    sleep(10)

    @sandbox.function() do |resp|
         new_var = resp.var.to_f
    end

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