2016-04-05 9 views
2

Basit bir V-REP simülasyonu geliştirdik. Bu, OS X üzerinde oldukça iyi çalışıyor ancak Linux'ta değil (Ubuntu 15.04). Ana betik dili olarak Lua kullanılır.V-REP'nin Lua `tonumum 'nil'i Linux'ta geri döndürüyor

gerçekten ilginç nedir
e[3]     -- -0.677782532263 
type(e[3])    -- string 
type(tonumber(e[3])) -- nil 

gerçektir:

Biz maalesef Linux üzerinde nil döndürür (ancak OS X üzerinde sorunsuz sayıya e[3] dönüştürür) (yorumlarda dönüş değerleri ile) aşağıdaki kodu eklemek Bir önceki kod, Lua 5.2.3 konsolunda (hem OS X hem de Linux) beklendiği gibi çalışır. Ancak, V-REP, Linux üzerinde çalışırken dizeyi doğru numaraya dönüştüremez.

Hem 32b and 64b V-REP versions (bugün indirilen) tam olarak aynı sonuçları kullanarak denedik - nil s. Kaybettiğimiz bazı şeylere dikkat eder misiniz? Ne Lua ne de V-REP, her gün kullandığımız şeylerdir.

Düzen 1: Ubuntu 15.04 Kullanıyorum. V-REP Lua 5.1 kullanır, My Lua sürümü:

konsolunda
$ 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 

, şu çalıştı:

$ 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 

Paketleri

+0

Gerçekten 'Nil' yazdırılıyor mu? Yoksa nil değil mi? Bu olduğunda, hem OS X'de hem de linux'da lua'nın aynı sürümünü kullandığınızdan eminsiniz? Ve ilk iki satırın her ikisi de, bu olduğunda OS X ve Linux'ta aynı değeri veriyorlar mı? –

+0

Merhaba Etan, 'nil' olsun, sürüm her iki platformda da aynıdır ve çıktı hakkında - değerler dinamik olarak python'da yaratılır ve vrep (ve lua) 'a uzak api yoluyla gönderilir, böylece aynı şekilde değildirler değerler, ama hata hiç os x üzerinde gerçekleşmez ve geçilen tüm float numaraları üzerinde linux olur. – Gyfis

+0

@EtanReisner tam olarak Gyfis yazdığı gibi. – petrbel

cevap

4

hata aslında neden olduğu V-REP, Lua 5.1'u kullanır ve test ettiğimiz bilgisayarlar numaralar için farklı yerel bölgelere sahiptir (linux, LC_NUMERIC=cs_CZ.UTF-8 ve mac, muhtemelen, en_US idi). yerel bir ondalık ayırıcı olarak bir virgül yoktu (örn -3,513) - Lua Mac numaraları olarak dizelerinde şamandıra numaralarını tanıdı ama Lua Linux üzerinde farklı yerel ayarıyla vermedi anlamına gelir

gerekli, bu nedenle dönüşüm için sıfır oldu. yerel zorlayacaktır

...$ LC_NUMERIC=en_US.UTF-8 ./vrep 

numaralarını tanımak için bir nokta bazlı ve etkinleştirmek Lua olmak:

düzeltme bu gibi en_US yerele vrep çalıştırmadan önce LC_NUMERIC bayrağı ayarlamaktır .

Teşekkürler @Etan tüm yardımlar için ve konuya doğru yönde poking için.

+1

Bir çekicilik gibi çalışır. Harika çözüm için teşekkür ederiz! – Vitaljok