beerdy
@beerdy
https://vk.com/beerdy

Хочу свой return_my в Ruby. Как это сделать?

К примеру как сделать нечто подобное:
module RootRouter
  def route
    obj = SlaveClass.new()
    #....
    return obj.one if something
    return obj.two if something_else
    return obj.thr if something_else_another
    #....
  end
end


class SlaveClass
  def initialize
    @obj = ActionClass.new()
  end

  def one method
    #do something
    #...
    @obj.some_method
    #do something
    #...
    #do something
    #...

    return 'no response'
  end
  def two method
  end
  def thr method
  end
end

class ActionClass
  def some_method
    #do something
    #...
    return_my 'some variable some_method' if example_false_value

    puts 'all ok we continue here'

    #do something
    #...
    
    return 'any text for return'
  end
  def second_method
    #do something
    #...
    return_my 'some variable second_method' if example_false_value

    puts 'all ok we continue here'

    #do something
    #...
    
    return 'any text for return'
  end
end


Т.е. чтобы return_my сразу выкидавало именно в RootRouter на его return в не зависимости в каком месте кода он находиться?, без if-ов на каждом уровне вложения
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
beerdy
@beerdy Автор вопроса
https://vk.com/beerdy
Артём Петренков: Эксепшены на то и эксепшены, чтобы вверх всплывать. И да, блоки begin ... rescue ... end можно вкладывать друг в друга.

Спасибо Артем!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vsuhachev
В руби именно для выхода из произвольного количества вложенностей есть throw/catch, под капотом это те же исключения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы