如何从python获取lua/translation中的类类型

如何从python获取lua/translation中的类类型,python,class,lua,torch,Python,Class,Lua,Torch,我试图找到一些类似于lua的课程。在python中,我将执行以下操作: a = {} type(a) >>>> dict 所以我在lua中有对象vocab。打印对象时,我得到: print(vocab) >>> { 3 : 20 o : 72 m : 70 d : 61 ( : 9 } 如何让lua吐出对象,类似于python中的type()这将为您提供对象的类据说Lua定义了“机制,而不是策略”。课程将是一项“政策”。你可以随心所欲地实现类的效果;

我试图找到一些类似于lua的课程。在python中,我将执行以下操作:

a = {}
type(a)
>>>> dict

所以我在lua中有对象vocab。打印对象时,我得到:

print(vocab)
>>> {
3 : 20
o : 72
m : 70
d : 61
( : 9
}

如何让lua吐出对象,类似于python中的type()这将为您提供对象的类

据说Lua定义了“机制,而不是策略”。课程将是一项“政策”。你可以随心所欲地实现类的效果;Lua提供了许多可以用来实现这一点的机制。但是Lua没有单一的方法来声明这样的构造

Lua的
type
标准方法将只返回Lua值的大类:数字、字符串、表等。由于Lua只有一种数据结构(表),所以每种类(不是由C生成的)都将是“表”类型

这样做的副作用是,在Lua很难使用其他人的策略。例如,如果Torch有办法将自己的“类”与常规表区分开来,那就行了。但它无法区分其他类实现与常规表


因此,没有通用的方法将表与某种形式的“类”区分开来。

据说Lua定义的是“机制,而不是策略”。课程将是一项“政策”。你可以随心所欲地实现类的效果;Lua提供了许多可以用来实现这一点的机制。但是Lua没有单一的方法来声明这样的构造

Lua的
type
标准方法将只返回Lua值的大类:数字、字符串、表等。由于Lua只有一种数据结构(表),所以每种类(不是由C生成的)都将是“表”类型

这样做的副作用是,在Lua很难使用其他人的策略。例如,如果Torch有办法将自己的“类”与常规表区分开来,那就行了。但它无法区分其他类实现与常规表

因此,没有通用的方法将表与某种形式的“类”区分开来。

:nil、boolean、number、string、function、thread、tableuserdata。您可以使用内置的
type()
函数找出对象所属的这些基本类型:

type('Hello world')                    == 'string'
type(3.14)                             == 'number'
type(true)                             == 'boolean'
type(nil)                              == 'nil'
type(print)                            == 'function'
type(coroutine.create(function() end)) == 'thread'
type({})                               == 'table'
type(torch.Tensor())                   == 'userdata'
请注意,
torch.Tensor
的类型是userdata。这是有道理的,因为
torch
库是用C编写的

userdata类型允许存储任意C数据 在Lua变量中。userdata值是指向原始数据块的指针 记忆。Userdata在Lua中没有预定义的操作,除了 分配和身份测试

userdata的元表放在注册表中,_索引 字段指向方法表,以便对象:method() 语法将起作用

因此,处理userdata对象时,我们不知道它是什么,但有一个方法列表,可以调用它们

如果自定义对象有某种机制(方法或其他东西)来查看其自定义类型,那就太好了。你猜怎么着?火炬对象有一个:

t = torch.Tensor()
type(t)       == 'userdata' # Because the class was written in C
torch.type(t) == 'torch.DoubleTensor'
# or
t:type()      == 'torch.DoubleTensor'
说到火炬。它有自己的对象系统仿真器,您可以自己创建一些torch类,并以相同的方式检查它们的类型。然而,对于
Lua
,这样的类/对象只不过是普通的表

local A = torch.class('ClassA')
function A:__init(val)
    self.val = val
end

local B, parent = torch.class('ClassB', 'ClassA')
function B:__init(val)
    parent.__init(self, val)
end

b = ClassB(5)
type(b)       == 'table' # Because the class was written in Lua
torch.type(b) == 'ClassB'
b:type() # exception; Custom Torch classes have no :type() method by defauld
:nil,boolean,number,string,function,thread,用户数据。您可以使用内置的
type()
函数找出对象所属的这些基本类型:

type('Hello world')                    == 'string'
type(3.14)                             == 'number'
type(true)                             == 'boolean'
type(nil)                              == 'nil'
type(print)                            == 'function'
type(coroutine.create(function() end)) == 'thread'
type({})                               == 'table'
type(torch.Tensor())                   == 'userdata'
请注意,
torch.Tensor
的类型是userdata。这是有道理的,因为
torch
库是用C编写的

userdata类型允许存储任意C数据 在Lua变量中。userdata值是指向原始数据块的指针 记忆。Userdata在Lua中没有预定义的操作,除了 分配和身份测试

userdata的元表放在注册表中,_索引 字段指向方法表,以便对象:method() 语法将起作用

因此,处理userdata对象时,我们不知道它是什么,但有一个方法列表,可以调用它们

如果自定义对象有某种机制(方法或其他东西)来查看其自定义类型,那就太好了。你猜怎么着?火炬对象有一个:

t = torch.Tensor()
type(t)       == 'userdata' # Because the class was written in C
torch.type(t) == 'torch.DoubleTensor'
# or
t:type()      == 'torch.DoubleTensor'
说到火炬。它有自己的对象系统仿真器,您可以自己创建一些torch类,并以相同的方式检查它们的类型。然而,对于
Lua
,这样的类/对象只不过是普通的表

local A = torch.class('ClassA')
function A:__init(val)
    self.val = val
end

local B, parent = torch.class('ClassB', 'ClassA')
function B:__init(val)
    parent.__init(self, val)
end

b = ClassB(5)
type(b)       == 'table' # Because the class was written in Lua
torch.type(b) == 'ClassB'
b:type() # exception; Custom Torch classes have no :type() method by defauld

所以我在lua中有对象vocab:“那不是lua。也许是蟒蛇,也许不是。但肯定不是卢阿。也不清楚你到底想做什么。可能是因为你实际上并没有说Python中的
type
实际上做了什么。python中的类型(a)将为您提供对象的类。我没有说任何关于
vocab
。不是Lua的部分是您随后创建的表。Lua使用
name=value,
语法进行表声明;您显示的表将产生语法错误。该表实际上是lua。你所看到的就是你打印出来的,你没有说剩下的都是打印出来的结果。您将其与
print
语句放在同一个代码块中。显而易见的推论是,它和其他语言是同一种语言。如果你想指出这是Lua脚本的结果,你应该把它说得更清楚。也许是蟒蛇,也许不是。但肯定不是卢阿。也不清楚你到底想做什么。可能是因为你实际上并没有说Python中的
type
实际上做了什么。类型