2012-04-12 8 views
0

編集を使用して、これはそれを行うための正しい方法であれば、私はわからないんだけど、これは私がちょうどLuaのを習い始め、今私はこの作業を持って、他のファイル内のテーブル

をどのような作品であり、I私はより組織的なコードスペースを持つことができるようにファイル間でテーブルを渡す方法を見つけようとしています。私はProgramming in Luaを読んでいます。何らかの理由で、私は何が間違っているのか理解できません。

私は取得しています問題は、このエラーである:

LUA:Test2.lua:3:このコードから '新規'(ゼロ値)

メソッドを呼び出すための試み:

--Test.lua---------------- 
module("Test", package.seeall) 
vector = require "./Hump/vector" 

Bot = {} 

Bot.position = vector.new(0,0) 

function Bot:New(object) 
    object = object or {} 
    setmetatable(object, self) 
    self.__index = self 
    return object 
end 


--Test2.lua------------------ 
require "Test" 

Bot1 = Test.Bot:New() 

print(Bot1.position) 

私が理解する限り、このエラーは新しいメソッドを見つけることができないことを意味し、事実上未定義です。私はパス内のファイルをインポートする必要があると思った?

答えて

1

Botは空のテーブルです。

local B = {} -- initialize local B with new table 
Bot = B -- Bot now references the same table as B 

B = { position = vector.new(0,0) } -- here you create a NEW table, B ~= Bot now 

function B:New(object) -- store New function in B table, Bot still empty 

これで空のテーブルが返されます。

ここでは2つの変数はまったく必要ありません。

local Bot = { 
    -- stuff 
} 

function Bot:New(object) 
    -- stuff 
end 

return Bot 
+0

ええ、私は、この問題を回避するための正しい方法はモジュール( "Test"、package.seeall)を使用して作業しているいくつかの研究の後、行3が本当にBposition = 0でなければならないことに気付きましたか? – RedShft

+0

投稿したコードでは、「Bot」は空のテーブルなので、それを超えて変更を加えました。 '' __index = 'を' 'Bot'自体に設定するべきです。なぜなら、それはメタテーブルだからです。これがクラス変数(つまり、 'Bot'のすべてのインスタンスで同じです)でなければ、' Bot'に 'position ='を入れたくありません。 positionが 'Bot'インスタンスごとに一意の状態であれば、' Bot'コンストラクタでオブジェクトを初期化する必要があります。 – Mud

+0

私の計画は、Bot型のすべてに対してクラス変数を配置することでした。 self .__ index = selfとselfの間には何が違うのですか?index = Bot? – RedShft

関連する問題