torch系列:关于luajit中string.format的支持

一、问题描述

最近在用torch发现一个奇怪的问题,就是在直接运行luajit中如果遇到以下语句会出错

x='11111'
string.format('%s'%{x})

但是直接运行luajit会报错,attempt to perform arithmetic on a string value。

真是日了狗。

真的是百思不得其解。。。


二、为什么会出现这个问题?

首先需要明确为什么需要直接运行luajit,因为我们需要在eclipse中调试,因此需要这么做。


三、问题分析


感性认识:

在介绍这个问题之前,需要明确,启动torch的几种方式

(1)直接在命令行输入th,然后输入上面那个出错的语句是没有问题的

(2)直接在命令行输入qlua,然后输入上面那个出错的语句会出现报错

(3)直接在命令行输入luajit,然后输入上面那个出错的语句会出现报错

好了,接下来我把torch里头的th文件(位于torch/install/bin里)的luajit替换成qlua,发现没有报错

也就是说,th文件里头导入的那些就会使得代码能够支持这种用法。

下面看下th文件里头究竟弄了啥

#!/bin/sh
exec '/home/cvlab/torch/install/bin/qlua' -e 'package.path="/home/cvlab/.luarocks/share/lua/5.1/?.lua;/home/cvlab/.luarocks/share/lua/5.1/?/init.lua;/home/cvlab/torch/install/share/lua/5.1/?.lua;/home/cvlab/torch/install/share/lua/5.1/?/init.lua;"..package.path; package.cpath="/home/cvlab/.luarocks/lib/lua/5.1/?.so;/home/cvlab/torch/install/lib/lua/5.1/?.so;"..package.cpath' -e 'local k,l,_=pcall(require,"luarocks.loader") _=k and l.add_context("trepl","scm-1")' '/home/cvlab/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th' "$@"

上述代码中有两个-e参数用于导入一些lua的包
那么如果我把上面的-e参数放入eclipse中的解释器中作为参数呢,是否会有用?
-e 'package.path="/home/cvlab/.luarocks/share/lua/5.1/?.lua;/home/cvlab/.luarocks/share/lua/5.1/?/init.lua;/home/cvlab/torch/install/share/lua/5.1/?.lua;/home/cvlab/torch/install/share/lua/5.1/?/init.lua;"..package.path; package.cpath="/home/cvlab/.luarocks/lib/lua/5.1/?.so;/home/cvlab/torch/install/lib/lua/5.1/?.so;"..package.cpath' -e 'local k,l,_=pcall(require,"luarocks.loader") _=k and l.add_context("trepl","scm-1")'
或者
-e 'package.path="/home/cvlab/.luarocks/share/lua/5.1/?.lua;/home/cvlab/.luarocks/share/lua/5.1/?/init.lua;/home/cvlab/torch/install/share/lua/5.1/?.lua;/home/cvlab/torch/install/share/lua/5.1/?/init.lua;"..package.path; package.cpath="/home/cvlab/.luarocks/lib/lua/5.1/?.so;/home/cvlab/torch/install/lib/lua/5.1/?.so;"..package.cpath' -e 'local k,l,_=pcall(require,"luarocks.loader") _=k and l.add_context("trepl","scm-1")' '/home/cvlab/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th'

结果发现我即使加入进去,也没有用。
当然,我对lua并不是很熟悉,只能这么尝试。

纠察到底:

另外查了下http://wiki.luajit.org/NYI#libraries_string-library

原来

string.format 对于luajit 2.1版本的支持是 partial的,Not for %p or non-string arguments for %s.

那么我尝试把代码修改为:
x='11111'
string.format('%s',x)
发现可以运行,那么问题算是解决了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值