arity
الوظيفة هو عدد الحجج التي يتطلبها. تعني وظيفة Currying
دالة تحويل دالة N arity
إلى N دالتي arity
1. وبعبارة أخرى ، فإنها تعيد هيكلة إحدى الدالتين بحيث تأخذ إحدى الحجة ، ثم ترجع دالة أخرى تأخذ الحجة التالية ، وهكذا. إليك مثال على ذلك: // غير بالكاري وظيفةهذا مفيد في البرنامج الخاص بك إذا كنت لا تستطيع توفير جميع الوسائط إلى وظيفة في وقت واحد. يمكنك حفظ كل استدعاء دالة في متغير ، والذي سيحافظ على مرجع الدالة المرتجعة الذي يأخذ الوسيطة التالية عندما تكون متاحة. في ما يلي مثال على ذلك باستخدام وظيفة
وظيفة غير مضمنة (x، y) {
ارجع x + y؛
}
// وظيفة الكاري
الوظيفة curried (x) {
وظيفة الإرجاع (y) {
ارجع x + y؛
}
}
curried (1) (2) // Returns 3
curried
في المثال أعلاه: // استدعاء وظيفة بالكاري في أجزاء:وبالمثل ، يمكن وصف
var funcForY = curried (1)؛
console.log (funcForY (2))؛ // المطبوعات 3
partial application
على أنه تطبيق عدد قليل من الوسيطات على إحدى الوظائف في وقت ما وإرجاع وظيفة أخرى يتم تطبيقها على مزيد من الوسيطات. إليك مثال على ذلك: // وظيفة محايدة
وظيفة غير متحيزة (x، y، z) {
ارجع x + y + z؛
}
var partialFn = impartial.bind (هذا ، 1 ، 2) ؛
partialFn (10)؛ // إرجاع 13
add
بحيث يستخدم currying لإضافة المعلمات x
و y
و z
. add(10)(20)(30)
يجب أن ترجع 60
.
testString: 'assert(add(10)(20)(30) === 60, "add(10)(20)(30)
should return 60
.");'
- text: add(1)(2)(3)
يجب أن ترجع 6
.
testString: 'assert(add(1)(2)(3) === 6, "add(1)(2)(3)
should return 6
.");'
- text: add(11)(22)(33)
يجب أن ترجع 66
.
testString: 'assert(add(11)(22)(33) === 66, "add(11)(22)(33)
should return 66
.");'
- text: يجب أن تتضمن شفرتك عبارة نهائية تُرجع x + y + z
.
testString: 'assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g), "Your code should include a final statement that returns x + y + z
.");'
```