खोज…


पीसीएल का उपयोग करना

pcall "संरक्षित कॉल" के लिए खड़ा है। इसका उपयोग फ़ंक्शंस में एरर हैंडलिंग को जोड़ने के लिए किया जाता है। pcall अन्य भाषाओं में try-catch समान काम करता है। pcall का लाभ यह है कि अगर pcall साथ pcall में गलतियाँ होती हैं तो स्क्रिप्ट का पूरा निष्पादन बाधित नहीं हो रहा है। यदि pcall साथ एक फ़ंक्शन के अंदर कोई त्रुटि होती है, तो एक त्रुटि होती है और बाकी कोड निष्पादन जारी रखता है।


वाक्य - विन्यास:

pcall( f , arg1,···)

वापसी मान:

दो मान लौटाता है

  1. स्थिति (बूलियन)
  • यदि फ़ंक्शन बिना किसी त्रुटि के निष्पादित किया गया था, तो सही है
  • यदि फ़ंक्शन के अंदर कोई त्रुटि उत्पन्न हुई, तो गलत देता है।
  1. फ़ंक्शन या त्रुटि संदेश का रिटर्न मान यदि फ़ंक्शन ब्लॉक के अंदर कोई त्रुटि हुई।

पीसीएल का उपयोग विभिन्न मामलों के लिए किया जा सकता है, हालांकि एक सामान्य फ़ंक्शन से त्रुटियों को पकड़ना है जो आपके फ़ंक्शन को दिया गया है। उदाहरण के लिए, हम कहते हैं कि हमारे पास यह फ़ंक्शन है:

local function executeFunction(funcArg, times) then
    for i = 1, times do
        local ran, errorMsg = pcall( funcArg )
        if not ran then
            error("Function errored on run " .. tostring(i) .. "\n" .. errorMsg)
        end
    end
end

जब रन 3 पर दिए गए फ़ंक्शन की त्रुटियां हैं, तो त्रुटि संदेश उपयोगकर्ता को स्पष्ट करेगा कि यह आपके फ़ंक्शन से नहीं आ रहा है, लेकिन उस फ़ंक्शन से जो हमारे फ़ंक्शन को दिया गया था। इसके अलावा, इसे ध्यान में रखते हुए एक फैंसी बीएसओडी को उपयोगकर्ता को सूचित किया जा सकता है। हालाँकि, यह उस एप्लिकेशन पर निर्भर है जो एक एपीआई के रूप में इस फ़ंक्शन को लागू करता है, सबसे अधिक संभावना है कि ऐसा नहीं किया जाएगा।

उदाहरण ए - पीसीएल के बिना निष्पादन

function square(a)
  return a * "a"    --This will stop the execution of the code and throws an error, because of the attempt to perform arithmetic on a string value
end

square(10);

print ("Hello World")    -- This is not being executed because the script was interrupted due to the error

उदाहरण बी - पीसीएल के साथ निष्पादन

function square(a)
  return a * "a"
end

local status, retval = pcall(square,10);

print ("Status: ", status)        -- will print "false" because an error was thrown.
print ("Return Value: ", retval)  -- will print "input:2: attempt to perform arithmetic on a string value"
print ("Hello World")    -- Prints "Hello World"

उदाहरण - निर्दोष संहिता का निष्पादन

function square(a)
  return a * a
end

local status, retval = pcall(square,10);

print ("Status: ", status)        -- will print "true" because no errors were thrown 
print ("Return Value: ", retval)  -- will print "100"
print ("Hello World")    -- Prints "Hello World"

लुआ में त्रुटियों को संभालना

यह मानते हुए कि हमारे पास निम्नलिखित कार्य हैं:

function foo(tab)
  return tab.a
end -- Script execution errors out w/ a stacktrace when tab is not a table

इसे थोड़ा सुधारते हैं

function foo(tab)
  if type(tab) ~= "table" then
    error("Argument 1 is not a table!", 2)
  end
  return tab.a
end -- This gives us more information, but script will still error out

यदि हम त्रुटि के मामले में भी किसी प्रोग्राम को क्रैश नहीं करना चाहते हैं, तो यह निम्न करने के लिए लुआ में मानक है:

function foo(tab)
    if type(tab) ~= "table" then return nil, "Argument 1 is not a table!" end
    return tab.a
end -- This never crashes the program, but simply returns nil and an error message

अब हमारे पास एक ऐसा कार्य है जो ऐसा व्यवहार करता है, हम इस तरह की चीजें कर सकते हैं:

if foo(20) then print(foo(20)) end -- prints nothing
result, error = foo(20)
if result then print(result) else log(error) end

और अगर हम चाहते हैं कि कार्यक्रम कुछ दुर्घटनाग्रस्त हो जाए, तो हम अभी भी ऐसा कर सकते हैं:

result, error = foo(20)
if not result then error(error) end

सौभाग्य से हमें हर बार वह सब लिखना नहीं पड़ता है; lua में एक फ़ंक्शन होता है जो ठीक यही करता है

result = assert(foo(20))


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow