【发布时间】:2016-04-05 21:31:30
【问题描述】:
我们开发了一个简单的V-REP 模拟,它在 OS X 上运行良好,但在 Linux (Ubuntu 15.04) 上运行良好。 Lua 被用作主要的脚本语言。
我们附上了以下代码(返回值在 cmets 中),不幸的是在 Linux 上返回 nil(但在 OS X 上将 e[3] 转换为数字没有问题):
e[3] -- -0.677782532263
type(e[3]) -- string
type(tonumber(e[3])) -- nil
真正有趣的是,前面的代码在 Lua 5.2.3 控制台(OS X 和 Linux)中可以正常工作。但是,在 Linux 上运行时,V-REP 无法正确地将字符串转换为数字。
我们尝试了32b and 64b V-REP versions(今天下载),结果完全相同 - nils。你能指出我们缺少的一些东西吗? Lua 和 V-REP 都不是我们每天都在使用的工具。
编辑 1: 我使用 Ubuntu 15.04。 V-REP 使用 Lua 5.1,My 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
在控制台中,我尝试了以下操作:
$ 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
包
【问题讨论】:
-
你真的把
Nil打印出来了吗?还是nil?当发生这种情况时,您确定在 OS X 和 linux 上使用相同版本的 lua?发生这种情况时,前两行在 OS X 和 linux 上都输出相同的值? -
你好 Etan,我们得到
nil,两个平台上的版本相同,关于输出 - 值在 python 中动态创建并通过远程 api 发送到 vrep(和 lua),所以它们不是相同的确切值,但错误根本不会在 os x 上发生,而是在 linux 上发生在所有传入的浮点数上。 -
@EtanReisner 和 Gyfis 写的完全一样。
-
如果你尝试
print(("%q"):format(e[3])),你会从e[3]的价值中得到什么?这是什么linux发行版?究竟是什么lua包?如果您手动尝试,您能否使该值在 lua 本身(没有 vrep)中工作? (即e={[3]="-0.677782532263"}; print(e[3], type(e[3]), tonumber(e[3]))?) -
@EtanReisner 请查看我的编辑 1 和答案。它似乎可以在控制台中使用。
标签: lua type-conversion multiplatform