この文書の目的 Lua には定数が存在しません。もちろん、開発の現場における種々のローカルルール - 例えば、「全部大文字の変数は定数として使用するから変更してはダメ」とか(Apple 風に)「kで始まる変数名は定数だから云々」など、プログラマが注意を払うことにより、結果として読取り専用変数を実現することは可能です。 しかし、これらの対処方法では「どうも不安だ」、「なんとなく気持ちが悪い」、等々…という方もいることでしょう。この文書では、メタテーブルを活用した読取専用変数を実現する方法を解説します。 動作確認した Lua のバージョン Lua-5.3.4。メタテーブルの機能を有する最近の Lua であれば動作すると思います。 しくみ 以前公開した記事「Lua で、プログラムから変数を作る方法」でも説明していますが、グローバル変数の実態は _G に格納されているフィールドそのものです。そして
![Lua で定数もしくは読取専用の変数を実現する方法 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/adb0f04b5b0d35f2925b41426925588391ac6078/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9THVhJTIwJUUzJTgxJUE3JUU1JUFFJTlBJUU2JTk1JUIwJUUzJTgyJTgyJUUzJTgxJTk3JUUzJTgxJThGJUUzJTgxJUFGJUU4JUFBJUFEJUU1JThGJTk2JUU1JUIwJTgyJUU3JTk0JUE4JUUzJTgxJUFFJUU1JUE0JTg5JUU2JTk1JUIwJUUzJTgyJTkyJUU1JUFFJTlGJUU3JThGJUJFJUUzJTgxJTk5JUUzJTgyJThCJUU2JTk2JUI5JUU2JUIzJTk1JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zM2E3ZGJkNzhlOTk3NzJkMWI0NDU0ZmVhZTNhNDdlOA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwaWlndXJhJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zNzQ5YWE3MzIwZGQ0NzQzODM5YzY2Y2IyMzk0ZmUyYQ%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Daeb43903b253fefcd94a0cc3a6e0882e)