Skip to content

Instantly share code, notes, and snippets.

@mkawalec
Last active August 29, 2015 14:05
Show Gist options
  • Select an option

  • Save mkawalec/a0fe63c9294028469639 to your computer and use it in GitHub Desktop.

Select an option

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

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

Zamiast 'broken', trzeba zwracać coś unikalnego, pewnie instancję jakiejś error klasy, albo jakiś exception może?

@mkawalec

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

trzeba jeszcze przekazywać w prawo zmienne do ustawienia, ale to będzie drugi parametr do rightParam

@mkawalec

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

Albo lepiej, żeby było ogólnie -> w prawo propaguje się this, rozszerzony (_.assign) o this pochodzący z tego wywołania

@mkawalec

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

i wywołuje się thisem ustawionym na outer this

@mkawalec

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

Czyli, pozostałe wrappery:

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

@mkawalec

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

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

@mkawalec

mkawalec commented Sep 1, 2014

Copy link
Copy Markdown
Author

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

@jakzale

jakzale commented Sep 1, 2014

Copy link
Copy Markdown

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