Быстрый вопрос по поводу разветвления Ruby - я наткнулся на немного разветвленного кода в Resque ранее, который был чертовски сексуален, но меня несколько опрокинуло.
Я надеюсь, что кто-нибудь расскажет мне немного подробнее о том, что здесь происходит.В частности - может показаться, что разветвление порождает ребенка (ожидаемый) и пинает его прямо в «чужую» сторону моего состояния (менее ожидаемого. Это ожидаемое поведение? Идиома Ruby?
Мой взлом IRB здесь:
def fork
return true if @cant_fork
begin
if Kernel.respond_to?(:fork)
Kernel.fork
else
raise NotImplementedError
end
rescue NotImplementedError
@cant_fork = true
nil
end
end
def do_something
puts "Starting do_something"
if foo = fork
puts "we are forking from #{Process.pid}"
Process.wait
else
puts "no need to fork, let's get to work: #{Process.pid} under #{Process.ppid}"
puts "doing it"
end
end
do_something