Lua 中,尝试索引 '__parent' 字段(一个空值)

这个问题是来自 torch5 的教程:http://torch5.sourceforge.net/manual/torch/index-8-1.html

require "torch"

-- 为方便命名
 do
   --- 创建一个类 "Foo"
   local Foo = torch.class('Foo')

   --- 初始化器
   function Foo:__init()
     self.contents = "这是一些文本"
   end

   --- 一个方法
   function Foo:print()
     print(self.contents)
   end

   --- 另一个方法
   function Foo:bip()
     print('bip')
   end

 end

--- 创建一个 Foo 的实例
 foo = Foo()

 --- 尝试一下
 foo:print()

 --- 创建一个继承自 Foo 的类 torch.Bar
 do
   local Bar = torch.class('torch.Bar', 'Foo')

   --- 初始化器
   function Bar:__init(stuff)
     --- 在自身上调用父类的初始化器
     self.__parent.__init(self)

     --- 做一些事情
     self.stuff = stuff
   end

   --- 一个新方法
   function Bar:boing()
     print('boing!')
   end

   --- 覆盖父类的方法
   function Bar:print()
     print(self.contents)
     print(self.stuff)
   end
 end

 --- 创建一个新的实例并使用它
 bar = torch.Bar("哈哈!")
 bar:print() -- 被覆盖的方法
 bar:boing() -- 子类的方法
 bar:bip()   -- 父类的方法

运行这个脚本之后,我得到了错误信息:

 /Users/frankhe/torch/install/bin/luajit: test1.lua:39: 尝试索引字段 '__parent' (一个空值)

这是详细信息的图片: enter image description here

我想知道为什么会出现这个错误。

点赞
用户1688185
用户1688185

使用:

local Bar, parent = torch.class('torch.Bar', 'Foo')

和:

function Bar:__init(stuff)
    parent.__init(self)

    self.stuff = stuff
end

torch.Bar 声明为父类为 Foo 的类,并在 Bar 的构造函数中初始化 stuff。在构造函数中使用 parent.__init(self) 来调用父类的构造函数。

2016-05-23 09:45:03