2016-06-23 7 views
0

ファイルからグローバル変数へのJSONコンテンツを「クラス」にロードしていた古いLUAメソッドを移動しようとしています。しかし、私はエラーのすべての時間を以下の取得:ファイルからのLUAロードJSON設定

attempt to call field 'decode' (a nil value) 
attempt to index global 'cjson' (a nil value) 

私はLuaのをよく知らないが、私はこのエラーが発生する理由は結果なしで、ほぼすべての組み合わせは非常にあなたが説明することができますしようとしましたか?

モジュールの現在の実装は次のようになります。私は他のファイルから、このような何かを実行したい最終的な結果として

Config = {} 
Config.__index = Config 

function Config.create(config_filename) 
    local cjson = require("cjson") 
    local config = {}    
    setmetatable(config,Config) 

    local f = io.open(config_filename, "r") 
    local content = f:read("*a") 
    f:close() 
    config = cjson.decode(content) 

    return config 
end 

return Config 

local config_class = require("config") 
local config = config_class.create("/path/to/file.json") 

ngx.say(config:some_configuration_data()) 

答えて

1

エラーメッセージは、あなたがcjsonとデコードがnilある告げたよう索引付けまたは呼び出すことができない値。

requireファイルをロードして、そのコードを実行し、戻り値を渡します。 Luaスクリプトを実行すると、デフォルトでnilを返す関数のように動作します。したがって、スクリプトが返すものを指定しない限り、requirenilを返します。

cjsonファイルの中に何が必要なのか分かりませんが、希望するjsonの実装は返されませんが、nilは明らかです。

したがって、cjsonのコードは、キー "decode"の下に関数を格納したLuaテーブルを返す必要があります。

+0

そして、どのように強制的に適切な "cjson"実装をロードする必要がありますか? – SZMER

+0

私はロードパスを混乱させました。ロード・パスの修正後に動作するようです。ありがとう。 – SZMER

関連する問題