Last active
August 29, 2015 14:05
-
-
Save mkawalec/a0fe63c9294028469639 to your computer and use it in GitHub Desktop.
Function wrapper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Tak się używa macza, tylko kurczę, jak pozbyć się tego pierwszego parametru, bo on nam niepotrzebny:P | |
match bla, | |
obj({a:1}) fun(supafn) obj({bla: 2}) -> code_1 | |
type(String) -> code_2 | |
# To wrapper funkcji. Jak się łączy kilka, to zakładając, że wyrażenie nazywa się a, uruchamia się przez a([arg1, arg2,...]) | |
w = (testelem) -> | |
(rightParam) -> | |
(toEval) -> | |
param = toEval.shift() | |
if typeof testelem is 'function' | |
if testelem(param) | |
rightParam.call(@, toEval) | |
else | |
throw 'broken' | |
else if Object.prototype.toString.call(testelem) is '[object Object]' | |
if _.difference(_.keys(testelem), _.keys(param)).length is 0 | |
thisExtenstion = _.reduce testelem, ((acc, value, key) -> | |
acc[value] = param[key] | |
return acc | |
), {} | |
rightParam.call(_.assign(@, thisExtension), toEval) | |
else | |
throw 'broken' | |
else | |
throw 'unsupported arg' |
aaaa, przecież możemy mieć jeden wrapper i nazwać go jakoś fajnie, na przykład 'w'.
myślałem, że zrobisz coś w stylu:
fun = match
pred -> a
co zostanie skompilowane do
var fun;
fun = match(pred(function() {
return a;
}));
i dajmy na to, ze pred
jest stworzony przez construktor Pred
, wiec wtedy mozesz stwierdzic, czy wywolujesz predykat na docelowej funkcji, czy nie. Wtedy można spokojnie czainować predykaty.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
pierwszy parametr mógłby być thisem z jakim chcemy maczować, jeśli nie jesteśmy w stanie się go pozbyć:P