Показать сообщение отдельно
  #5 (permalink)  
Старый 16.06.2019, 21:45
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Каррирование: из фукнкции типа (A, B) => C сделать возможным A => (B => C)
рони, важно понимать разницу между каррированием и применением функции... У вас одно применение каррирует, а другое применяет... Следует выделить каррирование в отдельный метод!

function curry(f, ...args) {
	return f.bind(this, ...args)
}

function printFullName(firstName, lastName, middleName) {
	return `${firstName} ${lastName} ${middleName}`
}

var curriedPrintFullName = curry(printFullName, "Semen", "Semenovich", "Kostev");
console.log(curriedPrintFullName());


{

class CurriedFunction extends Function {
	constructor(f) {
		f = f.bind();
		f.__proto__ = CurriedFunction.prototype;
		return f;
	}
	
	curry(...args) {
		return this.bind(null, ...args);
	}
}

function printFullName(firstName, lastName, middleName) {
	return `${firstName} ${lastName} ${middleName}`
}

const curriedPrintFullName = new CurriedFunction(printFullName).curry("Semen", "Semenovich", "Kostev");
console.log(curriedPrintFullName());

}


В этих примерах вы можете каррировать функции с любым количеством аргументов любое количество раз.

Последний раз редактировалось Malleys, 16.06.2019 в 21:55.
Ответить с цитированием