In Lua, how can you print the name of the current function, like the C99 __func__ identifier?

前端 未结 7 1771
别那么骄傲
别那么骄傲 2021-02-13 03:49

Something like this:

function foo()
    print( __func__ )
   ...
end

How can it be done?

7条回答
  •  梦如初夏
    2021-02-13 04:33

    While I agree with Ephraim's answer, that code will not always report the same name as pointed out by Chris Becke. When the function is assigned to another variable, the "name" would be changed.

    Here is another alternative. It just uses a string to identify the function. This method solves the changing name problem, but introduces a maintenance issue. The string would need to be kept in sync with the function name with future refactorization.

    function foo()
      local __func__ = "foo"
      print( __func__ )
      --...
    end
    

    Alternatively, if the location of the function is more important than the name, the following may be better. It will give a name to the function that is based on the source and line number.

    function getfunctionlocation()
      local w = debug.getinfo(2, "S")
      return w.short_src..":"..w.linedefined
    end
    
    function foo()
      print(getfunctionlocation()) --> foo.lua:6
      --...
    end
    

    If the __func__ still seems better, and standard Lua is not important, then the Lua parser can be modified as it is in this example for __FILE__ and __LINE__.

提交回复
热议问题