0

当我有一个代码通过有限状态任意多次转换时,如下例所示,

def a
  ...
  case some_condition
  when :foo then a
  when :bar then b
  else           c
  end
end
def b
  ...
  case some_other_condition
  when :baz then  a
  when :bang then b
  else            c
  end
end
def c
  ...
  case still_another_condition
  when :zap then  a
  when :boom then b
  else            c
  end
end
a

我认为每次转换到新状态时调用堆栈都会增长,这会导致性能问题。有没有办法避免调用堆栈的任意增长?尾递归优化与此有关吗?

4

1 回答 1

2

我想到的第一个解决方案是某种路由方法:

def routing(call = :a)
  begin
    call = send call
  end until call == :end
end

然后其他方法只返回要调用的方法的名称 next:

def a
  ...
  case some_condition
  when foo then :a
  when bar then :b
  else          :c
  end
end

这将使调用堆栈保持平坦。当你想跳过路由循环时,返回:end。

于 2012-09-26T05:57:32.327 回答