Ich versuche eifrig funktionale Programmierung in js zu lernen, aber ich habe eine harte Zeit. Ich fühle mich wie ich ständig Sachen tue, wie diese, die einfach nicht richtig überhaupt nicht fühlen:Composing Funktion mit höherer arity in Ramda
export const getParamFromUrl = R.curry((name, url) => R.compose(
R.match(new RegExp(`[?&]${name}=([^&]*)`))
)(url));
Ich fühle mich nicht wie ich immidiately Aufruf komponieren sollte. Was ist also der richtige Weg, um eine Funktionszusammensetzung mit einer Genauigkeit von zwei zu machen?
EDIT: Aus Gründen der Klarheit ist dies die eigentliche Funktion, wie es aussieht (und ich weiß, dass dies nicht der beste Weg ist, Query-Strings zu erhalten)
/* util.toMaybe takes a function and a value and returns Nothing()
if the function returns true and Just(value) if it returns false.
I think this is the HM:
util.toMaybe :: (a -> Boolean) -> a -> Maybe a
*/
export const getParamFromUrl = R.curry((name, url) => R.compose(
R.chain(util.toMaybe(R.isEmpty)),
R.map(R.nth(1)),
util.toMaybe(R.isEmpty),
R.match(new RegExp(`[?&]${name}=([^&]*)`))
)(url));
Mit der akzeptierten Antwort dies werden würde:
export const getParamFromUrl = R.curry(R.compose(
R.chain(util.toMaybe(R.isEmpty)),
R.map(R.nth(1)),
util.toMaybe(R.isEmpty),
(name, url) => R.match(new RegExp(`[?&]${name}=([^&]*)`), url)
));
Vielleicht bekomme ich nicht die funktionale Seite der Dinge. Müssen Sie sofort curry? Was ist falsch an einer regulären Funktion wie '(name, url) => url.match (new RegExp()) [1]' Sie können diese Funktion immer später umbrechen/curry, oder? – fet
Das ist auch eine schrecklich unzuverlässige Art, URL-Parameter zu parsen – naomik