我注意到Torch中有时会使用__tostring__
。在我的火炬数据框项目中,我有__tostring
来处理print(my_data)
。它的工作方式与原始Torch中的预期完全相同,但是当我运行iTorch时,它还会打印原始底层数据表,就好像它打印了一个单独的返回语句一样。
在查看文档后,我发现Torch经常使用__tostring__
,因此我很好奇它的区别是什么?更好地理解Lua中的print
调用也很有趣,来自R所有类都能够定义自己的print.class
,它整齐地处理输出并且没有副作用比如我在上面的iTorch案例中看到的那个。
答案 0 :(得分:1)
默认情况如下:
[{1]}始终调用tostring来格式化其输出。)但是,在格式化对象时,tostring首先检查对象是否具有带
的结果__tostring
调用相应的值(必须是函数)来完成其工作,将对象作为参数传递。无论这种元方法返回的是tostring
来自PiL, 13.3。
示例:
tostring
使用Torch class system时,会创建appropriate metatable。调用> t = setmetatable({}, {__tostring = function(x) return "foo" end})
> print(t)
foo
时,此metatable将查找__tostring
,如果找到,将使用相应的函数(有关详细信息,请参阅:these parts)。
示例:
__tostring__
因此,如果你实现一个自定义的Torch类,你只能覆盖 > do local Foo = torch.class("Foo"); function Foo:__tostring__() return "this is foo" end end
> f = Foo(); print(f)
this is foo
,因为Torch负责其余的。
<强>更新强>
为什么iTorch会在其输出中添加额外的print语句?
iTorch需要torch/env replaces the default print function。这就解释了你得到的输出。