मैं अब तक जो पढ़ा है उसके आधार पर मैं एक लुआ स्विच लिखने की कोशिश कर रहा हूं, ऐसा लगता है कि यह एक टेबल का उपयोग करके हासिल किया जाता है। तो मैंने वास्तव में बेयरबोन टेबल बनाया लेकिन जब मैं इसे चलाने की कोशिश करता हूं तो मुझे यह कहते हुए एक त्रुटि मिलती है कि टेबल इंडेक्स शून्य है।

आखिरकार मैं जो चाहता हूं वह अलग-अलग इनपुट पर आधारित है, इस कोड को अलग-अलग लुआ फाइलों पर कॉल करना चाहिए। लेकिन अभी के लिए जब से मैं इस भाषा में नया हूं, मुझे लगा कि मैं उस इंडेक्स त्रुटि के नहीं होने के लिए तैयार हो जाऊंगा।

धन्यवाद

#!/usr/bin/lua

-- hello world lua program 
print ("Hello World!")

io.write('Hello, where would you like to go?\n')
s = io.read()
io.write('you want to go to ',s,'\n')
--here if i input a i get error
location = {
  [a] = '1',
  [b] = '2',
  [c] = '3',
  [d] = '4',
}

location[s]()

ऊपर वह कोड है जो मुझे अब तक मिला है। नीचे त्रुटि है।

~$ lua lua_hello.lua 
Hello World!
Hello, where would you like to go?
a
you want to go to a
lua: lua_hello.lua:11: table index is nil
stack traceback:
    lua_hello.lua:11: in main chunk
    [C]: in ?

तालिका कोड यहां इस उदाहरण पर आधारित है: Lua Tables Tutorial अनुभाग: सारणी के रूप में तालिकाएं

1
D.Zou 15 जुलाई 2018, 22:48

2 जवाब

ऐसा प्रतीत होता है कि समस्या यह है कि location[a], location को इंडेक्स a पर सेट कर रहा है, जो एक स्ट्रिंग नहीं है। जब आप अपने इनपुट में a दर्ज करते हैं, तो इसे 'a' के रूप में पढ़ा जाता है, जो एक स्ट्रिंग है। इंडेक्स [a], इंडेक्स ['a'] से अलग है। आप जो चाहते हैं वह है अपने असाइनमेंट को बदलना ताकि वे स्ट्रिंग्स (location['a'] = '1') को असाइन किए जा सकें।

जैसा कि Ihf ने कहा है, यदि आप आउटपुट प्रिंट करना चाहते हैं तो आपको print(location[s]) पर कॉल करने की आवश्यकता है क्योंकि location[s] केवल स्ट्रिंग '1' (या जो भी मान, केवल एक स्ट्रिंग के रूप में) लौटाएगा। यदि आप संख्यात्मक मान निर्दिष्ट करना चाहते हैं (गणना या आदि के लिए उपयोग करने के लिए) तो आपको location['a'] = 1 का उपयोग करना चाहिए। वैकल्पिक रूप से, मान को एक स्ट्रिंग के रूप में रखें और जब आप मान का उपयोग करने का प्रयास करते हैं, तो बस tonumber() का उपयोग करें। उदाहरण: x = 5 * tonumber(location[s])

मुझे आशा है कि यह मददगार था, एक अच्छा सप्ताह है!

2
TheAverageCanadian 15 जुलाई 2018, 23:17

प्रयत्न

location = {
  ['a'] = '1',
  ['b'] = '2',
  ['c'] = '3',
  ['d'] = '4',
}

फिर वह त्रुटि दूर हो जाती है लेकिन attempt to call a string value (field '?') द्वारा प्रतिस्थापित कर दी जाती है क्योंकि location['a'] स्ट्रिंग '1' है।

शायद आप चाहते हैं

print(location[s])
1
lhf 15 जुलाई 2018, 23:01