1
を経由して「名前空間を使用して」私はファイルfoo.lua
持っている場合:bar.lua
に私はfoo.add()
すべての時間を入力することで悩まされていますfoo.lua
からコードを多用すると書き込みを好むだろうCをエミュレート++ _ENV
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
とを
local foo = require('foo')
local add, sub, multiply = foo.add, foo.sub, foo.multiply
をそれはあなたが多くのファイルから多くの値をエイリアシングを含めているの痛みであることを開始します:ちょうどadd()
bar.lua
で私はこれを追加することができます。
#include <iostream>
using namespace std
は:C++ではこれを回避する方法があるので、
私はそれを伝えることができるものから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
に賛成する理由以外)
このような方法でC++を使用することはますます貧弱な方法であると考えられています。 –
私はC++で人気がない理由を知っていますが、私はこのスレッドに応答してから、私のluaコード全体にこれを入れ始めます。私は、コードを読みにくくするために可能な限り理解するために高度な知識が必要なコードを書くことは避けがちですが、これは明らかにそのルールに違反します。ちょっと気になっただけ。 – Julian