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

Torch/Lua,如何编辑已知包的原始摘要文件?,lua,torch,Lua,Torch,我试图在名为nn的Torch包中的Module.lua中添加一个函数,但我的主程序没有找到它 假设我的函数是: function printTry() print("printTry()"); end 我在Module.lua文件的末尾添加了这个函数,我应该在我的Torch终端中使用它: require 'nn'; perceptron = nn.Module(); perceptron:printTry() 但系统会产生: string "perceptron.printTry();"

我试图在名为
nn
的Torch包中的
Module.lua
中添加一个函数,但我的主程序没有找到它

假设我的函数是:

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  

可能系统没有意识到我添加的这个新功能。。。我应该怎么做才能使用这个新方法呢?

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


使用torch.getmetatable:

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

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

你好,保罗<代码>顺序
可能错误,因此我从
Module.lua
重新启动。不幸的是,它不起作用。我试图在Module.lua的底部插入您的代码,然后运行:
require'nn';mod=nn.Module();mod:printTry()
,但它给出了相同的错误…实际上,
顺序
继承自
模块
,因此任何一个调用都应该可以工作。
模块中的其他方法有用吗?例如,
listModules
?您是否正在更新正确的文件?;)如果您重命名一个现有的方法,重命名后的方法有效吗?谢谢@PaulKulchenko。实际上,我试图重命名我的
Module.lua
文件的一些方法,但系统无法识别我的更改:所有重命名的方法都无效。我该怎么办?也许你更新了错误的文件?无论如何,如果Soumith(@smhx)的更改对您有效,这是一种更好的方法,因为它不需要更改源文件。可能是我更新了错误的文件,但这很奇怪,因为我只有一个
Module.lua
文件@smhs解决方案部分起作用,因为我正在实现的新函数将使用
Module.lua
中的
self
字段,而它不能在@smhs实现中使用
self
。您对如何正确使用替换的
self
有什么想法吗?谢谢谢谢@smhx,它起作用了!您还知道我如何在不使用
self
的情况下访问self字段吗?嘿@smhx,如果我想使用
self
字段怎么办?
require 'nn'
torch.getmetatable('nn.Module').printTry = function() print('PrintTry') end

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