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.

Lua で、プログラムから変数を作る方法

Posted at

この文書の目的

Lua で遊んでいると、プログラムにて変数を**「作る」**必要性に出くわす場合があります。この文書では、Lua のプログラムを用いて、グローバル変数を作る(宣言する、もしくは、定義する)方法を説明します。

英文を読むことに抵抗のない人は、Stackoverflow の記事 How do I make a dynamic variable name in Lua? を見ると良いかもしれません(というか、そこに全て書いてあります)。以前、私が調べていたときには、日本語で書かれた情報を見つけることができなかったので、ここにまとめた次第です。

動作確認した Lua のバージョン

Lua-5.3.4。_G (=大域環境を保持するグローバル変数)が備わっているバージョンであれば、多分、使えると思います。

しくみ

グローバル変数は _G に格納されているフィールドです。そのため、_G["PI"]=3.141592 を実行すれば、3.141592 という値を持つグローバル変数 PI が定義されます(実際には、_G["PI"]=4*math.atan(1) としたほうが良いかもしれない)。

しくみの確認.txt
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> PI
nil
> _G["PI"]=3.141592
> PI
3.141592
> 

コードの例

Office VBA におけるキーコード定数の一部 vbKeyA から vbKeyZ までを、プログラムにより定義してみます。これらの値は、vbKeyA には文字 A の ASCII コードである 65 が、vbKeyB には文字 B の ASCII コード 66 が格納されているといった具合です(参考:MSDN Keycode 定数)。

define_vba_keycodes.lua
do
    local kCodeA=string.byte("A")
    local kCodeZ=string.byte("Z")
    for i=kCodeA,kCodeZ do
        _G["vbKey"..string.char(i)]=i
    end
end

このスクリプトを実行し、それぞれの仮想キーコードが格納されている変数の値を確認すると…

vk確認.txt
> vbKeyA
65
> vbKeyB
66
> vbKeyZ
90

それぞれの変数が定義されていることを確認できます。

まとめ

本文書では、グローバル変数がテーブル _G のフィールドであることを紹介し、その応用としてプログラムにて動的に変数を定義する方法を示しました。この仕組みを応用すると、様々なことができますが、それらについてはまた別の記事で説明したいと思います。

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?