Рамда сочиняет передачу нескольких аргументов - PullRequest
2 голосов
/ 27 апреля 2019

Как мы передаем несколько входов в функцию внутри композиции?

const scaleLinear = R.curry((domain,range,t)=>{
    let [a,b] = domain,
        [c,d] = range;
    return (1 - (t-a)/(b-a))*c + (t-a)(b-a)*d;

//getDomain: arr1 -> [xmin,xmax]
//getRange:  arr2 -> [ymin,ymax]
const scale = R.compose(scaleLinear, getDomain, getRange);

Очевидно, что вышеприведенное не работает, но какова альтернатива, чтобы я мог в конечном итоге передать 2 фрагмента данных(arr1, arr2), а вывести соответствующий масштаб?

1 Ответ

4 голосов
/ 27 апреля 2019

В R.compose только арность самой правой (нижней) функции может быть больше 1. Она получает аргументы, переданные составной функции, возвращает единственное значение и передает его функции слева от нее, и и так далее.

В вашем случае вы хотите преобразовать аргументы scaleLinear, а не применять несколько функций к значению. Вы можете преобразовать аргументы функции, применив R.useWith и массив преобразователей:

const scale = R.useWith(scaleLinear, [getDomain, getRange, R.identity])

Теперь вы можете использовать scale так:

scale(arr1, arr2, 10)
...