1

ファイルがある場合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

4

1 に答える 1