Torch / Lua,如何编辑已知包的原始抽象文件?

时间:2016-02-18 22:39:03

标签: lua torch

我尝试在名为Module.lua的Torch包中向nn abstract file添加一个函数,但我的主程序找不到它。

假设我的功能很简单:

function printTry()
  print("printTry()");
end

我在Module.lua文件的末尾添加了这个函数,我应该在我的Torch终端中使用它:

require 'nn';
perceptron = nn.Module();
perceptron:printTry()

但系统会生成:

string "perceptron.printTry();"]:1: attempt to call field 'printTry' (a nil value)
stack traceback:
    [string "perceptron.printTry();"]:1: in main chunk
    [C]: in function 'xpcall'
    /home/davide/torch/install/share/lua/5.1/trepl/init.lua:668: in function 'repl'
    ...vide/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:199: in main chunk
    [C]: at 0x004064d0  

系统可能不知道我添加的这个新功能......我该怎么做才能使用这个新方法?

2 个答案:

答案 0 :(得分:1)

使用torch.getmetatable:

require 'nn'
torch.getmetatable('nn.Module').printTry = function() print('PrintTry') end

perceptron = nn.Sequential()
perceptron:printTry()

答案 1 :(得分:0)

您只是定义了一个全局函数printTry,但您将其称为perceptron上的方法。您需要将其定义为Module的字段(在Module.lua文件中,假设这是nn.Sequential返回的内容):

function Module:printTry()
  print("printTry()")
end