Project1

标题: 为什么发生栈过深 [打印本页]

作者: kvkv97    时间: 2025-12-21 01:15
标题: 为什么发生栈过深
def aa(j=2)
  
  for i in 0...2
      aa(i)
  end
  p "007"
end

aa
作者: kvkv97    时间: 2025-12-21 01:21
本帖最后由 kvkv97 于 2025-12-21 01:24 编辑

  def add_state(state_id, force = false)

    # 无附加本状态的情况下
    unless state?(state_id)

      # 状态 ID 追加到 @states 序列中
      @states.push(state_id)
      # 所有状态的循环
      for i in 1...$data_states.size
        # 状态变化 (+) 处理
        if $data_states[state_id].plus_state_set.include?(i)

          add_state(i)
        end
        # 状态变化 (-) 处理
        if $data_states[state_id].minus_state_set.include?(i)
          remove_state(i)
        end
      end

    end

  end

为什么上面 调用 add_state方法,不会发生栈过深?
作者: kvkv97    时间: 2025-12-21 01:54
def add_state(state_id=2)
  for i in 1...5
    if [2].include?(i)
      add_state(i)
    end
  end
end
   
add_state

发生栈过深,为什么?
作者: soulsaga    时间: 2025-12-21 02:33
上面有条件不会永远执行
下面无条件

差别就在这
作者: 百里_飞柳    时间: 2025-12-21 11:02
unless state?(state_id)
这个判定,就是如果已经附加了状态,就不再附加了,当然不会出现反复递归




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1