Я всегда использую ранний возврат, чтобы уменьшить вложенные if (программирование на других языках), например:
//instead of nested if like this
if (condition1) {
if (condition2) {
if (condition3) {
//... finally meet all conditions
//do the job
}
}
}
//return early
if (!condition1) {
//clean up resource in step #1
return
}
if (!condition2) {
//clean up resource in step #2
return
}
if (!condition3) {
//clean up resource in step #2
return
}
...
//finally meet all conditions
Но как мне досрочно вернуть рубин? Я не могу вернуться в блок if в Ruby. Я получил ошибку
«Неперехваченное исключение: неожиданный возврат ...` блок (2 уровня) в ': неожиданный возврат (LocalJumpError) »
---- Обновить -----
Извините, я забыл упомянуть, что в такой простой ситуации, как эта, это работает
def early(input)
if (input <0)
puts 'should >0'
return
end
puts 'good'
end
Я изучаю Fiber и использую образец из https://www.igvita.com/2010/03/22/untangling-evented-code-with-ruby-fibers/
def http_get(url)
f = Fiber.current
http = EventMachine::HttpRequest.new(url).get
# resume fiber once http call is done
http.callback { f.resume(1,http) }
http.errback { f.resume(2,http) }
return Fiber.yield
end
EventMachine.run do
Fiber.new{
result = http_get('https://www.google.com/')
if (result[0] ==2)
puts "error"
return # using break has the error 'break from proc-closure (LocalJumpError)' too
end
result = http_get('https://www.google.com/search?q=eventmachine')
page = result[1]
puts "Fetched page 2: #{page.response}"
}.resume
end
Я получил ошибку.
---- обновление 2 ----
Получив ответ и комментарии, я нашел этот Как я могу вернуться что-то рано из блока?
И этот Почему оператор break в ruby ведет себя по-другому при использовании Proc.new v. знак амперсанда? объясняет, почему break также не работает. Процитируем: «break должен вернуть вызывающего блока, но Proc.new уже вернулся».
return vs break vs next определенно является препятствием для рубинового новичка
if
блока в Ruby» - конечно, можете. - person Aleksei Matiushkin   schedule 21.12.2018if
s уже являются запахом кода, но столькоif
s - явный признак того, что код необходимо реорганизовать как можно скорее. - person Aleksei Matiushkin   schedule 21.12.2018