Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
V-REP';在Linux上,s Lua`tonumber`返回nil_Lua_Type Conversion_Multiplatform - Fatal编程技术网

V-REP';在Linux上,s Lua`tonumber`返回nil

V-REP';在Linux上,s Lua`tonumber`返回nil,lua,type-conversion,multiplatform,Lua,Type Conversion,Multiplatform,我们开发了一个简单的模拟,它在OSX上运行得很好,但在Linux(Ubuntu 15.04)上没有。被用作主要的脚本语言 我们附加以下代码(返回值在注释中),不幸的是在Linux上返回nil(但在OS X上将e[3]转换为数字而没有问题): 真正有趣的是,前面的代码在Lua5.2.3控制台(OSX和Linux)中都能正常工作。但是,在Linux上运行时,V-REP无法将字符串正确地转换为数字 我们尝试了这两种方法(今天下载),结果完全相同-nils。你能指出一些我们遗漏的东西吗?Lua和V-RE

我们开发了一个简单的模拟,它在OSX上运行得很好,但在Linux(Ubuntu 15.04)上没有。被用作主要的脚本语言

我们附加以下代码(返回值在注释中),不幸的是在Linux上返回
nil
(但在OS X上将
e[3]
转换为数字而没有问题):

真正有趣的是,前面的代码在Lua5.2.3控制台(OSX和Linux)中都能正常工作。但是,在Linux上运行时,V-REP无法将字符串正确地转换为数字

我们尝试了这两种方法(今天下载),结果完全相同-
nil
s。你能指出一些我们遗漏的东西吗?Lua和V-REP都不是我们每天使用的UTIL

编辑1: 我使用Ubuntu 15.04。V-REP使用Lua 5.1,我的Lua版本:

$ apt-cache policy lua5.1
lua5.1:
  Installed: 5.1.5-7.1
  Candidate: 5.1.5-7.1
  Version table:
 *** 5.1.5-7.1 0
        500 http://cz.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status
在console中,我尝试了以下操作:

$ lua
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> e={[3]="-0.677782532263"}; print(e[3], type(e[3]), tonumber(e[3]), type(tonumber(e[3])))
-0.677782532263 string  -0.677782532263 number

软件包

这个错误是由V-REP使用Lua5.1这一事实造成的,我们测试它的计算机有不同的数字区域设置(linux有
LC\u NUMERIC=cs\u CZ.UTF-8
,mac可能有
en\u US

这意味着Mac上的Lua将字符串中的浮点数识别为数字,但具有不同语言环境的Linux上的Lua没有——它没有一个逗号(例如,
-3513
)作为语言环境所需的十进制分隔符,因此在转换时返回nil

修复方法是在将vrep运行到
en\u US
区域设置之前设置
LC\u NUMERIC
标志,如下所示:

...$ LC_NUMERIC=en_US.UTF-8 ./vrep
这将强制区域设置为基于点的,并使Lua能够识别数字


感谢@Etan提供的所有帮助,并从正确的方向指出了这个问题。

从lua代码中设置语言环境的另一种方法,如os.setlocale(“C”)

并非所有系统都可以在启动时更改任意应用程序的区域设置,有时需要更改整个系统的区域设置,这可能会给其他应用程序带来不便。如果使用V-REP分发的脚本以与XML文件相同的方式分发,其中分隔符是句点,而不是逗号,那么在调用tonumber函数之前,应该通过开放环境的变量从LUA而不是外部安装正确的控制台是合乎逻辑的

LUA文档清楚地描述了os.setLocale函数的用途,并且清楚地说明了它会影响字符串到数字的转换。在调用转换函数之前,需要确保设置正确


此外,更改自身区域设置的脚本更具可移植性,因为它不需要启动人员知道应该从外部为V-REP指定哪些环境变量。

您真的打印出了
Nil
吗?还是
nil
?发生这种情况时,您确定在OS X和linux上使用的是相同版本的lua吗?当这种情况发生时,前两行在OS X和linux上都输出相同的值?Hello Etan,我们得到的是
nil
,在两种平台上的版本都是相同的,关于输出-这些值是在python中动态创建的,并通过远程api发送到vrep(和lua),因此它们不是完全相同的值,但是这个错误在os x上根本不会发生,在linux上所有传入的浮点数都会发生。@EtanReisner这和Gyfis写的一模一样。如果你尝试
print(“%q”):format(e[3])
,你会得到
e[3]
的值是多少?这是linux的哪个发行版?什么样的包装?如果您手动尝试,您能在lua本身(没有vrep)中使用该值吗?(即
e={[3]=“-0.677782532263”};打印(e[3],键入(e[3]),tonumber(e[3])
?)@EtanReisner请查看我的编辑1和答案。它似乎在控制台中工作,就像一个符咒。感谢您的伟大解决方案!好吧,据我所知,公认的答案确实将区域设置作为解决方案。所以它还没有完全关闭。不过,就目前情况而言,这个答案并不是很有用。我建议对评论进行大量编辑或转换。
...$ LC_NUMERIC=en_US.UTF-8 ./vrep