वहां ऐसा कोई फ़ंक्शन नहीं है। मुझे लगता है कि ऐसा कोई कार्य नहीं है, क्योंकि कार्य प्रथम श्रेणी के नागरिक हैं। तो एक फंक्शन वैरिएबल द्वारा संदर्भित किसी भी अन्य की तरह एक मूल्य है। इसलिए NAME_OF_FUNCTION
फ़ंक्शन बहुत उपयोगी नहीं होगा, क्योंकि एक ही फ़ंक्शन में कई चर हो सकते हैं, या कोई भी नहीं।
आप, टेबल (मनमाने ढंग से या _G) के माध्यम से पाशन पता चल सके कि मान x बराबर वैश्विक काम करता है, या किसी तालिका में कार्यों के लिए एक का अनुकरण कर सकते हैं। यदि ऐसा है तो आपको फ़ंक्शन का नाम मिल गया है।
a=function() print"fun a" end
b=function() print"fun b" end
t={
a=a,
c=b
}
function NameOfFunctionIn(fun,t) --returns the name of a function pointed to by fun in table t
for k,v in pairs(t) do
if v==fun then return k end
end
end
print(NameOfFunctionIn(a,t)) -- prints a, in t
print(NameOfFunctionIn(b,t)) -- prints c
print(NameOfFunctionIn(b,_G)) -- prints b, because b in the global table is b. Kind of a NOOP here really.
एक और दृष्टिकोण एक तालिका में कार्यों लपेट, और एक metatable सेट अप फ़ंक्शन को कॉल करने, इस तरह के लिए होगा:
fun1={
fun=function(self,...)
print("Hello from "..self.name)
print("Arguments received:")
for k,v in pairs{...} do print(k,v) end
end,
name="fun1"
}
fun_mt={
__call=function(t,...)
t.fun(t,...)
end,
__tostring=function(t)
return t.name
end
}
setmetatable(fun1,fun_mt)
fun1('foo')
print(fun1) -- or print(tostring(fun1))
इसमें कुछ समय नंगे कार्यों क्योंकि का उपयोग कर की तुलना में धीमी हो जाएगा मेटाटेबल लुकअप का। और यह किसी को भी राज्य में फ़ंक्शन का नाम बदलने, उसमें मौजूद तालिका में फ़ंक्शन का नाम बदलने, फ़ंक्शन बदलने आदि को रोकने से नहीं रोकेगा, इसलिए यह सबूत छेड़छाड़ नहीं है। आप fun1.fun
जैसे अनुक्रमणित करके टेबल की पट्टी भी पट्टी कर सकते हैं जो कि यदि आप इसे मॉड्यूल के रूप में निर्यात करते हैं तो अच्छा हो सकता है, लेकिन आप नामकरण और अन्य चाल को हटा सकते हैं जिन्हें आप मेटाटेबल में डाल सकते हैं।
मैं सिर्फ अपने आप को निर्यात करने के लिए स्ट्रिंग पारित सकता है, लेकिन मैंने सोचा था कि क्योंकि मुझे लगता है कि यह समारोह अपने आप में गुजर अधिक सुरुचिपूर्ण है मैं पूछ होगी। यद्यपि यह स्रोत के रूप में नाम के बाद बहुत भिन्न है, केवल स्रोत में ही रहता है। – Paralife
मुझे लगता है कि आप इस बिंदु में गलत हैं क्योंकि नाम स्रोत में है केवल स्रोत में रहता है। यह सबसे स्थिर और संकलित भाषाओं के लिए सच है, लेकिन गतिशील/पटकथा भाषाएं उनके नामों को देखकर कार्यों को प्रेषित करती हैं, इसलिए वे देर से बाध्यकारी हो सकते हैं (और बंदर पैच कोड इत्यादि में कार्यों को पुन: स्थापित करने की अनुमति देते हैं) – fortran
संभावित डुप्लिकेट [ लुआ में ऑब्जेक्ट का नाम स्ट्रिंग करें] (http://stackoverflow.com/questions/6800648/stringify-object-name-in-lua) – finnw