каррирование javascript

Я пытаюсь создать функцию карри , которую можно применить к любой функции и вернуть другую с одним аргументом применяется. Свойства, которые я хочу иметь:

  1. Если функция имеет только один аргумент, функция карри должна возвращать значение: f (а); curry (f, x) = f (x);
  2. Если функция имеет много аргументов, currey должен повторно запустить каррированную функцию: g (a1, a2, .., aN); curry (g, x) = g2 (a2, .., aN): g2 (a2, .. aN) = g (x, a2, ..., aN)
  3. Свойство длины каррированной функции должно работать "как необходимо " g.length = N => curry (g, x) .length = N-1

В Prototype Framework есть несколько реализаций карри, которые обсуждаются в одном блоге . Но эта реализация не очень хороша, потому что она не работает с функциями только с одним аргументом (1), а также возвращает атрибут length функции, равный 0 (3).

Для первого свойства существует простая реализация:

 function curry(f,x) {
    if (f.length == 1) return f(x);
    ...
 }

Но я не знаю, как работать с третьим правилом, т.е. функция может быть построена как внутренняя функция, так как будет вложенное лексическое окружение, и я смогу использовать f:

function curry(f,x) {
   return function() { ... }
}

, но в этом случае я не буду дольше сможет явно задавать параметры. С другой стороны, функция может быть создана с помощью оператора 'new Function', что-то вроде этого:

 function curry(f,x) {
    var args = [];
    for (var i=1; i

Но в этой ситуации f и x не будут связаны, потому что анонимная функция будет создана в когда я понял, что блок боковой панели «Как задать вопрос / форматировать» на той же странице «Задать вопрос» делает именно то, что я хочу…

Я был в процессе написания длинного описания того, что я когда я понял, что поле боковой панели «Как задать вопрос / форматировать» на той же странице «Задать вопрос» делает именно то, что я хочу.

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

Я попытался покопаться в исходном коде и сценариях на этом экране «Спросить», но там ' происходит так много, что это практически невозможно (по крайней мере, для меня). Я предполагаю, что jQuery действительно делает такие вещи довольно простыми, но я новичок в этом, поэтому мне трудно понять это для себя. (И если это окажется обычным вопросом, мои извинения - я искал около часа, но есть , поэтому много подробных вопросов jQuery, которые я не смог найдите ответ.)

Заранее благодарим за любую помощь.

14
задан Laurent Stanevich 11 March 2011 в 03:25
поделиться