2016-04-08 16 views
1

Bir dize adını Lua/Torch'daki bir işlev olarak değerlendirmek istiyorum. GelenLua/Torch dilinde ismini verilen bir işlev nasıl çağırır?

tensorType(some arguments) 

:

require 'torch' 

tensorType = torch.getdefaulttensortype() 
print (tensorType) -- Will print "torch.DoubleTensor" 

Amacım takip gibi bu işlevi bir fonksiyonun adı olarak tensorType dizeyi kullanmak ve değerlendirmek mümkün değildir: Aşağıda yapmak istediğim şeyin bir örnektir MATLAB ve Python, keyfi dizeleri çalıştırabilecek bir “eval()” işlevi vardır. Lua/Torch'da böyle bir işlev var mı?

Bunu Torch/Lua'da nasıl yapabilirim?

+0

Lütfen daha fazlasını açıklayın. İşlevlerin adları yoktur. "torch.DoubleTensor" zaten bir tanımlayıcı değil. Bu bir ifade mi demek istiyorsun? "Meşale" küresel bir değişken olur mu? –

+0

@TomBlodget Ne demek istediğimi tam olarak anlamadım, ama bildiğim kadarıyla işlevlerin isimleri var (soruda verilen örnekte olduğu gibi). Bence makinende "Torch" yüklü değil. Ben haklı mıyım – Amir

+0

Çok üzgün olduğum için üzgünüm. Bir işlev, bir veya daha fazla değişken tarafından başvurulan bir değerdir. Bir fonksiyon olduğuna inandığınız bir değeriniz varsa, onu aramayı deneyebilirsiniz. Yani, bu kısım önemsiz hale gelir. Soru "torch.DoubleTensor" ile ne demek istiyorsun. Yorumlarınıza dayanarak genel bir cevap istiyorsunuz. Bir tanımlayıcı, nokta, tanımlayıcıya benziyor. Bu, bir indeksleme işleminin bir dizge (ikinci tanımlayıcı) olarak indeks (anahtar) ile gerçekleştirildiği bir ifade olabilir. @lhf bunu nasıl kullandığını gösterdi - "meşale" varsayımı, eğer bir küresel olsaydı, kapsamdaki bir değişkendir. –

cevap

1

loadstring'u kullanabilirsiniz, ancak genellikle çalışma zamanında kod derlemesi gerektiğinden bu önerilmez. Bu ne için?

+0

Program çalışırken veri türleri arasında dinamik olarak geçiş yapabilmek istiyorum. – Amir

+1

@Amir Anlamıyorum? – warspyking

+0

Yani programımda, farklı veri türlerinden verileri içeren bir tablo var. Program bazı varsayılan veri türüyle (örneğin, torch.DoubleTensor) çalışırken, tablodaki verileri varsayılan veri türüne dönüştürmem gerekir. – Amir

1

İlk dizesinden alanın adını ayıklamak: işlevi çağırmak için

k=tensorType:match("%.(.+)$") 

Sonra adını kullanmak:

torch[k](some arguments) 
+0

Teşekkürler. Ama bu sadece benim sorunum için çalışıyor ve genellenebilir değil. Sadece isminin verildiği bir işlev ismini çağırmanın genel bir yolu var mı? – Amir

1

Ayrıca lutorpy deneyebilirsiniz, bir lua motoru olacak python'da, herhangi bir lua/torch kütüphanesi yükleyebilir ve lua.eval ('torch.DoubleTensor (3,4)') ”ile lua kodunu çalıştırabilirsiniz. Daha fazla ayrıntı için lutorpy'a bakın.

İlgili konular