मैं भाषा वाक्य रचना के बारे में लिख रहा हूँ। क्या वहाँ कोई भाषा है जिसमें विधि नाम के अंदर पैरामीटर रखे गए हैं?


29

जावास्क्रिप्ट में:

function getTopCustomersOfTheYear(howManyCustomers, whichYear) {
   // Some code here.
}
getTopCustomersOfTheYear(50, 2010);

C # में:

public List<Customer> GetTopCustomersOfTheYear(int howManyCustomers, 
 int whichYear)
{
   // Some code here
}
List<Customer> customers = GetTopCustomersOfTheYear(50, 2010);

PHP में:

public function getTopCustomersOfTheYear($howManyCustomers, $whichYear)
{
   // Some code here
}
$customers = getTopCustomersOfTheYear(50, 2010);

क्या कोई ऐसी भाषा है जो इस वाक्य रचना का समर्थन करती है:

function GetTop(x)CustomersOfTheYear(y)
{
    // Some code here
}
returnValue = GetTop(50)CustomersOfTheYear(2010);

क्या यह एक समारोह लिखने के लिए अधिक अर्थपूर्ण, अधिक पठनीय रूप नहीं है?

अद्यतन: मैं यह सवाल पूछ रहा हूं, इसका कारण यह है कि, मैं एक नई भाषा के लिए एक नए वाक्यविन्यास के बारे में एक लेख लिख रहा हूं। हालाँकि, मैंने सोचा था कि तरीकों की घोषणा करने के लिए इस तरह के वाक्यविन्यास डेवलपर्स के लिए अच्छे और अधिक अनुकूल हो सकते हैं और प्राकृतिक भाषा के अधिक निकट होने के कारण भाषा के सीखने-घटने में कमी आएगी। मैं सिर्फ यह जानना चाहता था कि इस सुविधा पर पहले ही विचार किया जा चुका है या नहीं।


12
यह पढ़ने में आसान हो सकता है, एक बार जब आप मुहावरे के आदी हो जाते हैं, लेकिन मुझे लगता है कि इसके लिए एक सही पार्सर लिखना मुश्किल होगा।
मेसन व्हीलर

2
"प्लेसहोल्डर्स" से आपका क्या मतलब है? इस प्रश्न को समझना कठिन है, हालांकि अंतिम कोड उदाहरण ऑब्जेक्टिव-सी और स्मॉलटॉक का याद दिलाता है।
ग्रेफेड

3
AFAIK स्मॉलटाक इस वाक्यविन्यास का उपयोग करने वाली पहली भाषा थी, जैसे विशेष रूप से 'hello world' indexOf: $o startingAt: 6या Rectangle width: 100 height: 200। Btw।, इस सवाल में क्या गलत है?
maaartinus

8
यदि आप एक कोष्ठक को स्थानांतरित करते हैं, तो आपको मिलता है: returnValue = GetTop(50, CustomersOfTheYear(2010))जो मुझे उतना ही पठनीय लगता है, और वास्तव में अधिक लचीला / रूढ़िवादी। ... और हाँ, यह सामान्य सामान्य वाक्यविन्यास है।
dagnelies

2
@ कर्णुड: मैं पूरी तरह से सहमत हूं। प्रस्तावित सिंटैक्स केवल अपघटन की कमी के लिए एक समाधान है।
back2dos

जवाबों:


41

हाँ, और हाँ। हाँ, ऐसी भाषा है, और हाँ, बहुत से लोग इसे पढ़ने के लिए उपयोग करने के बाद इसे और अधिक पढ़ने योग्य पाते हैं।

उद्देश्य-सी में, विधि यह होगी:

- (NSArray*)getTop:(int)count customersOfTheYear:(Year)year;

यह वास्तव में एक बहुत ही आकस्मिक उदाहरण है जो बहुत अच्छी तरह से नहीं पढ़ा है, इसलिए यहां वास्तविक कोड से बेहतर है:

+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;

यह एक विधि के लिए प्रोटोटाइप है जो लाल, हरे, नीले और अल्फा मानों का उपयोग करके एक नया यूआईसीकलर उदाहरण देता है। आप इसे इस तरह कहेंगे:

UIColor *violet = [UIColor colorWithRed:0.8 green:0.0 blue:0.7 alpha:1.0];

ऑब्जेक्ट-सी प्रोग्रामिंग भाषा में प्रतिच्छेदित मापदंडों के साथ संदेश नामों के बारे में और पढ़ें ।


16
पहली बार जब मैंने इसके बारे में ऑब्जेक्टिव CI में पढ़ा तो लगा कि यह बहुत ही चालाक है, लेकिन इसे वास्तव में नाम दिया गया है पैरामीटर को और अधिक कठोर और प्रबंधित करने के लिए कठिन बना दिया गया है। इसके अलावा, अच्छा जवाब।
ZJR

2
विधि कैसे लागू की जाती है, इसका एक उदाहरण एमिस नहीं जाएगा।
ग्रेफेड 16

3
@ZJR, इसके विपरीत विकिपीडिया की राय के बावजूद, ओबज -सी की शैली नामित मापदंडों की तरह है , लेकिन अलग है। उपरोक्त उदाहरण में, विधि नाम है: +colorWithRed:blue:green:alpha:। मैं पैरामीटर विधि से मेल खाते के लिए नाम का उपयोग हुआ है, लेकिन मैं के रूप में आसानी के लिए इस्तेमाल किया जा सकता था r, b, g, और a। जावास्क्रिप्ट के रूप में नामित मापदंडों के साथ, आप मूल्यों तक पहुंचने के लिए दिए गए वास्तविक नामों का उपयोग करेंगे। सही नाम पैरामीटर आमतौर पर किसी भी क्रम में दिए जा सकते हैं, और पैरामीटर वैकल्पिक हो सकते हैं। तो इसी तरह, हाँ, लेकिन मौलिक रूप से अलग है।
कालेब

2
मैं अजगर सोच रहा था: color(r=0xFF,g=0xFF,b=0x55)या color(b=0x32,r=0x7F,a=.5,g=0xFF)तो और। चलो उन बहुत नामित मापदंडों को कॉल करते हैं , फिर। :)
ZJR

3
@ZJR, आपके अजगर का उदाहरण सही है - यही मैं "पैरामीटर नाम" कहूंगा। मैं सिर्फ इतना कह रहा हूं कि ओबज-सी वास्तव में आपको बिल्कुल नहीं देता है। वाक्यविन्यास जावास्क्रिप्ट के नामित मापदंडों की तरह बहुत कुछ दिखता है क्योंकि विधि भागों में टूट गई है, और प्रत्येक भाग में एक बृहदान्त्र है, लेकिन यह वास्तव में ऐसा बिल्कुल नहीं है । ओबज-सी में नाम विधि नाम का हिस्सा हैं, न कि ऐसे नाम जिनका उपयोग कार्यान्वयन में मापदंडों को संदर्भित करने के लिए किया जा सकता है; आदेश मायने रखता है; पैरामीटर वैकल्पिक नहीं हैं। मुझे शक है कि हम शायद इससे ज्यादा सहमत हैं।
कालेब

25

उत्तर: स्मालटाक

http://en.wikipedia.org/wiki/Smalltalk

'hello world' indexOf: $o startingAt: 6 जावा की तरह है "hello world".indexOfStartingAt(o, 6)

Rectangle width: 100 height: 200 जावा की तरह है new Rectangle(100, 200)

वाक्यविन्यास है ... expression word1: parm1 word2: parm2 word3: parm3 ...विधि का नाम सभी शब्दों का संयोजन है।


17

मेरा मानना ​​है कि आप " धाराप्रवाह इंटरफ़ेस (मैं इसके द्वारा एक टिप्पणी कर रहा हूं, जो मूल रूप से @ जेस्पर द्वारा" उत्तर ") के लिए बनाई गई अमूर्तता की तलाश में है।" यह अब सामान्य पैटर्न कई भाषाओं में सफलतापूर्वक लागू हो गया है, जिनमें से Objective-C केवल एक है।

यहाँ एक बहुत साफ उदाहरण है:

Person bo = new Person();
bo.Set.FirstName("Bo").LastName("Peep").Age(16).Size("Little").LostHerSheep();

आप देख सकते हैं कि रैंडी पैटरसन के धाराप्रवाह इंटरफ़ेस को कैसे डिज़ाइन किया जा सकता है

आंद्रे वियाना एक संक्षिप्त इतिहास देता है और फिर दो और लेख भागों में संभावित कार्यान्वयन की चर्चा करता है, जिसमें बहुत सारी उपयोगी जानकारी भी शामिल है। विआना ने पुराने विचार को वापस इंगित किया है जिसका मैंने पहली बार स्मॉलटाक 80 में सामना किया था , जिसे " कैस्केडिंग " कहा जाता है , जो एक ही वस्तु पर कई संदेश भेजने में सक्षम है। ऐसा लग रहा था:

aThing one: 'one';
  two: 'two';
  other.

कैस्केडिंग बाद में " मेथड चाइनिंग " के रूप में विकसित हुई , जहाँ हम " मॉडिफ़ायर मेथड्स को होस्ट ऑब्जेक्ट को लौटाते हैं, ताकि एक ही एक्सप्रेशन में एक से अधिक मॉडिफ़ाइर्स को आमंत्रित किया जा सके। " विधि का अनुसरण करते हुए आगे चलकर हम जिस धाराप्रवाह इंटरफ़ेस अवधारणा को जानते हैं और जिसका उपयोग हम आज अक्सर करते हैं। । आप जो करने की योजना बनाते हैं वह बहुत समान दिखता है।

Ayende Rahien चर्चा करता है कि "धाराप्रवाह इंटरफ़ेस" अपने स्वयं के नाम के लायक होने के लिए "विधि श्रृंखलन" से काफी भिन्न हो सकता है

धाराप्रवाह इंटरफेस आमतौर पर व्यवहार चालित विकास (बीडीडी) में इस्तेमाल किए गए कुछ नए उपकरणों में देखा जाता है और यहां तक ​​कि एनयूएनआईटी में एक प्रमुख .NET यूनिट परीक्षण उपकरण, अपने नए बाधा-आधारित एस्टर मॉडल में अपना रास्ता ढूंढ लिया है ।

ये मूल दृष्टिकोण बाद में रूबी, पायथन, सी #, ऑब्जेक्टिव-सी और जावा सहित अन्य भाषाओं में लागू किए गए हैं । कुछ इसी तरह लागू करने के लिए, आप " क्लोजर " के विचार पर अध्ययन करना चाहेंगे , जो कि चेनिंग और प्रवाह के लिए बहुत अधिक मौलिक है।

शायद आप इन मॉडलों पर सुधार कर सकते हैं; यही कारण है कि हम महान नई भाषाएं प्राप्त करते हैं। फिर भी, मेरा मानना ​​है कि पूरी तरह से समझने की विधि जंजीर और धाराप्रवाह इंटरफेस आपको एक शानदार शुरुआती बिंदु देंगे, जहां से आप अपने विचारों को विकसित कर सकते हैं!


2
+1 अब तक के अधिकांश शोध जवाबों के लिए, हालांकि उदाहरण जोड़ने और पठनीयता के लिए फिर से शब्द बनाने में मदद मिल सकती है।
हेयरस्टाइल

@ हाइलम, मुझे वापस जाने के लिए धन्यवाद और उदाहरण और थोड़ा और विस्तार से जोड़ने के लिए!
जॉन टोबलर

3
अपवित्र क्योंकि यह धाराप्रवाह शैली का एक अच्छा वर्णन है, लेकिन कृपया ध्यान दें कि यह वास्तव में ओपी के बारे में नहीं पूछ रहा है। जैसा कि मैंने इसे पढ़ा है, प्रश्न एकल फ़ंक्शन या विधि के नाम के कुछ हिस्सों के साथ मापदंडों को प्रतिच्छेद करने से संबंधित है । प्रस्तावित फ़ंक्शन घोषणा पर ध्यान दें function GetTop(x)CustomersOfTheYear(y):। यह एक एकल फ़ंक्शन है, दो अलग-अलग कार्यों के लिए जंजीर कॉल नहीं।
कालेब

@ कालेब मुझे लगता है कि वह यहाँ इंगित करने की कोशिश कर रहा है कि ये इनफिक्स पैरामीटर एक धाराप्रवाह इंटरफ़ेस (यह उत्तर) या नामित पैरामीटर (दूसरा उत्तर) करने के लिए एक अनम्य तरीका है। अब तक मैंने उनसे कोई फायदा नहीं देखा है कि एक धाराप्रवाह इंटरफ़ेस / नामित पैरामीटर बेहतर नहीं कर सकते हैं।
इज़काता

16

ऑब्जेक्टिव-सी ऐसा करता है। यहाँ एक विशिष्ट प्रोटोटाइप है:

- (void) areaWithHeight: (float) height andWidth: (float) width;

यहाँ आप इस तरह के एक विधि कहते हैं:

float area = [self areaWithHeight: 75 andWidth: 20];

ऑब्जेक्टिव-सी का इस्तेमाल मुख्य रूप से मैक ओएस एक्स के लिए कोको और आईओएस के लिए कोको टच के साथ किया जाता है, लेकिन जीसीसी हर प्लेटफॉर्म पर ऑब्जेक्टिव-सी कोड का निर्माण करेगा, जिस पर जीसीसी काम करता है।


क्षमा करें कि गोली एक हाइफ़न होनी चाहिए थी। मुझे लगता है कि उत्तर पाठ में हाइफ़न को मार्कअप के रूप में लिया जाता है। ऑब्जेक्टिव-सी में हाइफ़न का उपयोग उन तरीकों को घोषित करने के लिए किया जाता है जो किसी वस्तु से संबंधित हों - [foo bar: x] जहां foo एक ऑब्जेक्ट या क्लास उदाहरण है - जबकि क्लास के तरीकों के लिए प्लस साइन्स का उपयोग किया जाता है, जो C ++ को स्थिर सदस्य फ़ंक्शन के रूप में संदर्भित करता है।
माइक क्रॉफर्ड

13

आम लिस्प में, आप इस तरह से एक फ़ंक्शन के लिए कीवर्ड तर्क को परिभाषित कर सकते हैं:

(defun area (&key width height)
    (* width height))

फ़ंक्शन को इस तरह कहा जाता है:

(area :width 2 :height 3)

Ada में आपको एक विशेष घोषणा की आवश्यकता नहीं है - आप क्रम में तर्कों को सूचीबद्ध करके या इस तरह से तर्कों को नाम देकर किसी भी प्रक्रिया या कार्य को वैकल्पिक रूप से कॉल कर सकते हैं:

a := area(width => 2, height => 3);

अंत में, बूस्ट लाइब्रेरी में C ++ में सुविधा जोड़ने के लिए हैक्स की एक परत शामिल है: http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html


5

मुझे इसका नाम नहीं मिला, लेकिन एक डिज़ाइन पैटर्न कुछ इसी तरह से पूरा करने के लिए है, जहां एक फ़ंक्शन कॉल वर्णित के रूप में संशोधित एक नई वस्तु देता है। उदाहरण के लिए:

query = db.getTopCustomers(50).forYear(2010);

इसका उपयोग बहुत बार नहीं किया जाता है क्योंकि हुड के तहत असहनीय जटिलता से बचने के लिए आपके डेटा को बहुत ओर्थोगोनल होना पड़ता है, लेकिन सही परिस्थितियों में उपयोगी हो सकता है।


6
इसे धाराप्रवाह इंटरफ़ेस शैली कहा जाता है।
जेसपर

@ जेस्पर, जो मैं देख रहा हूं वह jQuery के चेनिंग के समान है। क्या मैं सही हू?
सईद नेमाटी

हां, @Saeed, jQuery इस शैली का उपयोग करता है।
कार्ल बेवेलफेल्ट

5

पायथन में कीवर्ड पैरामीटर हैं। फंक्शन परिभाषा उदाहरण

def getTopCustomers(count,year):
...

फ़ंक्शन कॉल उदाहरण

x = getTopCustomers(year=1990, count=50)

(मुझे लगता है कि यह मूल प्रश्न की भावना में काफी नहीं है, लेकिन यदि लिस्प में कीवर्ड पैरामीटर योग्य हैं, तो ऐसा करें। स्मालटाक और ऑब्जेक्टिव-सी में, हालांकि, तर्कों के बीच कीवर्ड वास्तव में फ़ंक्शन नाम / लुकअप का हिस्सा हैं। ।)


मुझे व्यक्तिगत रूप से यह बेहतर लगता है, इसके लिए आपको पैरामीटर नामों के बिना फ़ंक्शन को कॉल करने का विकल्प मिलता है यदि आप मापदंडों के आदेश को जानते हैं
पाब्लो मेचर

4

अगाडा में मिक्सफिक्स नोटेशन है

if_then_else x y z = case x of
                     True -> y
                     False -> z

 if cond then x else y

जब भी फ़ंक्शन को अंडरस्कोर के साथ नामित किया जाता है, तो इसे बीच में एक तर्क के साथ दो भागों में विभाजित किया जा सकता है


4

जबकि प्रति प्रोग्रामिंग भाषा नहीं है , ककड़ी फ़ंक्शन नामों के बीच में पैरामीटर लेती है, जिसमें रिक्त स्थान शामिल हो सकते हैं और अंग्रेजी की तरह दिखते हैं।

रूबी में 'फ़ंक्शंस' को परिभाषित किया गया है

# definition
Given /^I calculate (.*) times (.*)$/ do |x, y|
    @result = x.to_i * y.to_i
end

Then /^the result should be (.*)$/ do |v|
    @result.should == v.to_i
end

# usage
Scenario:
    Given I calculate 6 times 9
    Then the result should be 42

4

TeX में आप मैक्रो को एक "तर्क पैटर्न" के रूप में परिभाषित कर सकते हैं, जिसका मूल अर्थ है कि आपका कॉलिंग प्रोटोकॉल मुफ़्त है। अपने विशिष्ट उदाहरण के लिए, आप उपयोग कर सकते हैं

\def\getTopCustomers#1OfTheYear#2;{%
  The #1 top customers of the year #2.
}
\getTopCustomers 50 OfTheYear 2010;

ध्यान दें कि ;यदि आप रजिस्टरों के साथ खेलने के लिए सहमत हैं तो इससे छुटकारा पाना संभव है :

\newcount\customers
\newcount\year
\def\getTopCustomers#1OfTheYear{%
  \customers#1\relax
  \afterassignment\reallyGetTopCustomersOfTheYear
  \year
}
\def\reallyGetTopCustomersOfTheYear{%
  The {\the\customers} top customers of the year {\the\year}.
}
\getTopCustomers 50 OfTheYear 2010

TeX आपको अपने लेक्सर को फिर से कॉन्फ़िगर करने की अनुमति देता है, और \afterassignmentऊपर दिए गए मैक्रो के लिए धन्यवाद , आप संख्याओं को बढ़ाने के लिए अंतर्निहित प्रक्रियाओं का उपयोग कर सकते हैं। यह बहुत ही कॉलिंग प्रोटोकॉल को परिभाषित करने के लिए बहुत उपयोगी है । उदाहरण के लिए, टेबल के लिए मार्कडाउन नोटेशन को समझना TeX मैक्रोज़ को लिखना बहुत प्रशंसनीय है।

अब आप पूछते हैं कि "मैं अपने डेटाबेस का उपयोग कैसे करूं जहां ग्राहक TeX से संग्रहीत हैं?" लेकिन यह एक और सवाल है। :)

आम लिस्प में, निश्चित रूप से एक queryमैक्रो को परिभाषित करना संभव है जो आपको लिखने की अनुमति देता है

(query getTopCustomers 50 OfTheYear 2010)

जहां getCustomers और TheYear को प्रतीकों के रूप में व्याख्या की जाती है। यह मैक्रो का काम है कि यह समझ में आए। कॉमन लिस्प, कोड पठनीयता के क्षेत्र में उत्कृष्ट है (हाँ, मेरा मतलब है!) क्योंकि मैक्रो सिस्टम आपके आवेदन के लिए आसानी से छद्म भाषाओं को बनाने की अनुमति देता है। (मुझे लगता है कि उन्हें एप्लीकेशन लैंग्वेज कहा जाता है।)

पुनश्च: ऐसा लगता है कि किसी ने C ++ को उद्धृत नहीं किया। निकटतम आप (प्रीप्रोसेसर के बिना) प्राप्त कर सकते हैं

query.getTopCustomers(50).OfTheYear(2010):

चाल के लिए (या कुछ और) getTopCustomersपर एक संदर्भ देता है queryकि यह भी लागू करता है OfTheYear। आप इस उदाहरण को एक छोटी क्वेरी भाषा तक बना सकते हैं, लेकिन फिर आपको अंतिम गुणों (मान लौटाते हुए) की पहचान करनी होगी या एक finaliseविधि जोड़ना होगा (लुकअप को प्रदर्शित करना और मूल्य वापस करना)। यदि आपको ऐसा लगता है, तो आप एसटीएल के स्ट्रीम नियंत्रकों की नकल भी कर सकते हैं और जैसी चीजें लिख सकते हैं

query << getTopCustomers(50) << OfTheYear(2010) << flush;

लेकिन यह फिर से आवेदन भाषाओं की दिशा में जा रहा है।

संपादित करें: मैंने @han उत्तरों की अनदेखी की, वह भी कॉमन लिस्प और सी ++ (लेकिन टीएक्स नहीं!) को उद्धृत करता है।


2

जावास्क्रिप्ट या किसी भी अन्य भाषा में समर्थन बंद किया जाना, आप कर सकते हैं कि करी इस तरह एक समारोह:

function getTopCustomersFunc(count) {
    return function(year) {
       // run some query, return count customers from year
    }
}
var top20Func = getTopCustomersFunc(20);
var top20Customers2005 = top20Func(2005);
var top20Customers2008 = top20Func(2008);

1
+1 क्योंकि यह दिलचस्प है, लेकिन याद रखें कि top20Func में '20' अब एक पैरामीटर नहीं है बल्कि नाम का एक हिस्सा है जो आपको पैरामीटर की याद दिलाता है। आप आसानी से कह सकते हैं var top5Func = getTopCustomersFunc(37);:। यहां '5' भ्रामक है, लेकिन कोड ठीक उसी तरह काम करता है जैसे कि चर का नाम दिया गया था top37Func
कालेब

1

यह "भाषा" की आपकी परिभाषा पर निर्भर करता है, लेकिन रोबोटफ्रेमवर्क परीक्षण रूपरेखा आपको इस तरह से कीवर्ड परिभाषित करने देता है। एम्बेडेड तर्कों पर उनके प्रलेखन से :

Select ${animal} from list | Open page | pet selection
                            | Select item from list | animal_list | ${amimal}

उपरोक्त एक नया कीवर्ड (अनिवार्य रूप से एक फ़ंक्शन) घोषित करता है, जिसका नाम "सूची से $ $ {जानवर}" है, जहां '$ {जानवर}' एक पैरामीटर है। आप इसे "सूची से बिल्ली का चयन करें" की तरह कहते हैं


यह मुझे एसक्यूएल स्टेटमेंट की तरह लगता है। +1
सईद नेमाटी

1

सूचित करें 7।

To create (employee - a person) being paid (salary - a number):
    say "Welcome to your new job, [name of employee]!";
    choose a blank row from the table of employees;
    now the paid entry is the salary;
    now the name entry is the name of the employee.

और इसी तरह।


3
यह बिल्कुल नहीं समझाता है कि भाषा का सिंटैक्स कैसे काम करता है। बहुत से लोग सूचित भाषा से परिचित नहीं हैं और कोड के अन्य क्षेत्रों में कॉल या इसके उपयोग से मापदंडों को अलग नहीं कर सकते हैं।

मैं इस भाषा से एक तरह से अंतर्द्वंद्वित हूं। उत्तर केवल एक विस्तृत कोड नमूने के साथ छोटा था, लेकिन इसलिए ओपी द्वारा दिए गए नमूने थे (हालांकि अधिक पारंपरिक भाषाओं के साथ)। विकी के पास इसके बारे में पढ़ने के लिए एक अच्छा लेख है।
योयो

0

कॉमन लिस्प के कीवर्ड पहले ही बताए जा चुके हैं, लेकिन कॉमन लिस्प के मैक्रो भी इसे काफी आसानी से अनुमति देते हैं:

(defmacro get-my-element (from list at index)
  `(nth ,index ,list))

यह तो जैसे कहा जा सकता है:

(get-my-element from '(a b c) at 1) ;returns B

टिप्पणी करने के लिए एक बात है, हालांकि, कि शर्तों है fromऔर atलागू नहीं कर रहे हैं। वहाँ कुछ होना चाहिए , उन्हें पूरी तरह से छोड़ देना एक त्रुटि है, लेकिन चूंकि मैक्रो ने उन्हें समाप्त करना छोड़ दिया है, इसलिए यह बहुत मायने नहीं रखता कि वे पठनीयता से परे हैं (जो महत्वपूर्ण है):

(get-my-element from '(a b c) 3 1) ;also returns B

-2

क्लोजर में, इस तरह की स्थितियों के लिए कीवर्ड तर्क का उपयोग करना आम है, जैसे:

(get-customers :top 50 :year 2010)

कीवर्ड तर्क काफी लचीले होते हैं, वे वैकल्पिक हो सकते हैं और इनमें डिफॉल्ट निर्दिष्ट होते हैं आदि।


-4

आप अजगर में इसका अनुकरण कर सकते हैं। उदाहरण के लिए,

def GetTop(customers, ofYear):
  #write some code here to get the customers

print GetTop(customers=50 ofYear=2010)

या और भी

def GetTop(**args):
  #write some code here using the same parameter names as above

print GetTop({customers: 50, ofYear: 2010})

1
आपके दूसरे उदाहरण में वाक्य रचना गलत है। इसके अलावा, किसी ने पहले से ही यह पोस्ट किया है।
विंस्टन एवर्ट

यह केवल 3 साल पहले पोस्ट किए गए इस पूर्व उत्तर में किए गए बिंदु (और बहुत बेहतर तरीके से समझाया गया) को दोहराता है
gnat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.