Skip to content

Instantly share code, notes, and snippets.

@mkawalec
Last active August 29, 2015 14:05
Show Gist options
  • Save mkawalec/a0fe63c9294028469639 to your computer and use it in GitHub Desktop.
Save mkawalec/a0fe63c9294028469639 to your computer and use it in GitHub Desktop.
Function wrapper
# 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'
@mkawalec
Copy link
Author

mkawalec commented Sep 1, 2014

i wywołuje się thisem ustawionym na outer this

@mkawalec
Copy link
Author

mkawalec commented Sep 1, 2014

Czyli, pozostałe wrappery:

  • dokończenie fun
  • obj
  • list
  • regex
  • param = tylko binduje parametr

@mkawalec
Copy link
Author

mkawalec commented Sep 1, 2014

pierwszy parametr mógłby być thisem z jakim chcemy maczować, jeśli nie jesteśmy w stanie się go pozbyć:P

@mkawalec
Copy link
Author

mkawalec commented Sep 1, 2014

aaaa, przecież możemy mieć jeden wrapper i nazwać go jakoś fajnie, na przykład 'w'.

@jakzale
Copy link

jakzale commented Sep 1, 2014

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