ファイルがある場合foo.lua
:
local foo = {}
foo.add = function(a, b) return a+b end
foo.sub = function(a, b) return a-b end
foo.multiply = function(a, b) return a*b end
return foo
そして、bar.lua
私はコードを多用しています。いつもfoo.lua
入力foo.add()
するのが面倒で、ただ書くことを好むのでadd()
、bar.lua
これを追加できます。
local foo = require('foo')
local add, sub, multiply = foo.add, foo.sub, foo.multiply
しかし、多くのファイルから多くの値をエイリアスすることを含めると、それは苦痛になり始めます。C++ では、これを回避する方法があります。
#include <iostream>
using namespace std
lua では、次のようにこの機能をエミュレートできると考えていました。
local foo = require('foo')
setmetatable(_ENV, {__index = foo})
私が言えることから、スコープを尊重しているため、以下のコードのようなものがうまく機能します。
実際、以下のコードは機能しません。lua replを介してコードを実行していました。以下のコード スニペットを lua ファイルに記述したところ、目的の結果が得られませんでした。
f = function() -- returns 2
setmetatable(_ENV, {__index = foo})
return add(1, 1)
end
add(1, 1) -- returns 2
これを後悔する理由はありますか?( にも当てはまる理由を除くusing namespace
)