zoukankan      html  css  js  c++  java
  • 记一个全局变量"冒充"局部变量引起的bug

    看代码相当简单直观,觉得怎么都不会出错,可运行结果明明就是错了 - 对着vim摸着脑袋就是想不出哪里有问题,可去掉新加的代码,就又可以了。

    没办法,只好祭出杀手锏:一行一行注释掉来观察。。。

    反映问题的代码段相当简单:

    if condition then
        local v = create_object(mpr)
        if condition2 then v.R = "fixedR" end
        return v.MP .. v.R
    end

    被影响的是和v同类的一些object,可是这个代码里怎么看都没问题,v是被我改了,可那是local的啊,管我怎么改对全局都不会有影响。

    当注释掉这一行试了一下发现可以之后,带着不可思议的心情,检查起来,然后去看create_object()这个函数:

    object_cache = {}
    function create_object(mpr)
        if object_cache[mpr] then
            return object_cache[mpr]
        end
      
        local obj = split(mpr)
        object_cache[mpr] = obj
        return obj
    end

    原来我改的东西,不是local的,而是全局的,放在一张全局表的cache。。。

    这里为了提高效率,把处理过的东西cache起来了,create_object只要是相同的输入,返回的都是同一个object。。。

  • 相关阅读:
    什么是经验
    Linux驱动开启调试信息
    insecticide|contradictions| at large|delay doing|
    timber|stain|compensate|
    whip|resist|patch|intimate|
    chop|divorce|harsh|mutual|compel|
    crack|erosion|strip|
    stack|session|fuss|anniversary
    abrupt|promising
    nevertheless|magnificent |prosperous|
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/3199288.html
Copyright © 2011-2022 走看看