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()