2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Corona SDKAdvent Calendar 2014

Day 5

グローバル変数を捕まえよう

Last updated at Posted at 2014-12-05

LuaそしてCoronaでグローバル変数は色々な問題の原因となります。
そしてLuaの構成上でも、実はパフォーマンスにも良くはありません(とは言え普通のアプリで変数をグローバルにしたことでパフォーマンス悪影響は大したことない)。

他にグローバル変数の悪影響はこのCoronaブログの記事にも書いてあります:
 http://coronalabs.com/blog/2013/05/28/tutorial-goodbye-globals/

では今回の本題、グローバル変数を捕まる手法、に入りましょう。
自分はグローバル変数を極力使わない派ので、自分はいつもmain.luaの先頭にこのpatchを当てます。これをすれば誰かどこかでグローバル変数を使ったのはすぐ捕まえる!

patch.lua
local _KNOWN_GLOBALS = {
    _scrollview = true,
    imageSheet  = true,
    LuaLibStore = true,
    facebook    = true,
    socket      = true,
    store       = true,
    launchPad   = true,
    crypto      = true,
    lfs         = true,
    --など...
    --外部モジュールはたまにGlobalに変数を定義するので、一旦無視をしたい変数をこちらに追加
}
setmetatable(_G, {
    __index = function( t, k )
        if _KNOWN_GLOBALS[k] then
            return
        end    
        print("ERROR", debug.traceback("access of undefined global "..tostring(k), 2))
        _KNOWN_GLOBALS[k] = true
    end,
    __newindex = function( t, k, v )
        rawset(t, k, v)
        if _KNOWN_GLOBALS[k] then
            return
        end
        print("WARN", debug.traceback("creating new global "..tostring(k).."="..tostring(v), 2))
    end
})

自分はこのちょっとしたコードのおかげで何回か救われたことあるので是非使ってみてください!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?