Использование режима сопоставления для определения функции (use pattern match define the function)
Поддерживает следующие функции:
Онлайн-запуск (online run) https://runkit.com/npm/defun
Использование (useage)
npm install defun --save
var defun = require("defun").defun;
import {defun} from 'defun'
var fn = defun({
'"hello"':"hello",
'(_:xs)':xs=>xs
});
console.log(fn([1,2,3])) //->[2,3]
<script src="./defun.js"></script>
Тестирование (test): Используйте Jasmine для модульного тестирования. Путь к файлу: /test/defun-jasmine-test.html.
Демо (demo): Примеры используют некоторые функции ECMAScript 6. Для браузеров, отличных от Chrome, потребуется внести изменения.
Примеры кода (snipets):
var sum = defun({
"[]":0,
"(x:xs)":(x,xs)=>x+sum(xs)
});
sum([1,2,3,4,5]);
var sort = defun({
"[]":[],
"(x:xs)":(x,xs)=>sort(xs.filter(a=>a<x)).concat(x).concat(sort(xs.filter(a=>!(a<x))))
});
sort([1,8,0,4,0]);
var logicfn = defun({
"[]":false,
"('string':xs)":xs=>xs.join(""),
"x?array":x=>x.join(""),
"{type:'string',value:val}":val=>val,
"@obj{type:'self'}":obj=>obj,
"else":false
});
Документация по использованию (usage document):
var fn = defun({
"777":'number',
"'str'":'string',
"[]":'empty arr',
"{}":'empty obj',
"else":"else"
});
fn(777)->'number' //сопоставляет "777"
fn('str')->'string' //сопоставляет "'str'"
fn([])->'empty arr' //сопоставляет "'[]'"
fn({})->'empty obj' //сопоставляет "{}"
fn(8388)->'else' //сопоставляет "else"
var fn = defun({
"1":1,
"1,2":2,
"1,2,3":3,
"1,_,3":4,
"_,_,_":5,
"else":"else"
});
fn(1)->1 //сопоставляет "1"
fn(1,2)->2 //сопоставляет "1,2"
fn(1,2,3)->3 //сопоставляет "1,2,3"
fn(1,3,3)->4 //сопоставляет "1,_,3"
fn(3,3,3)->5 //сопоставляет "_,_,_"
fn(1,1,1,1,1,1,1)->"else"
var fn = defun({
"(1:xs)":function(xs){return xs},
"(a:b:c:xs)":function(a,b,c,xs){return [a,b,c,xs]},
"(x:xs)":function(x,xs){return [x,xs]},
"{a,b:'b'}":function(a){return a},
"{a,b}":function(a,b){return [a,b]},
"{a:{aa},b:'b'}":function(aa,b){return aa},
"x":function(x){return x}
});
fn([1])->[] //сопоставляет "(1:xs)"
fn([1,2,3])->[2,3] //сопоставляет "(1:xs)"
fn([2,2,3])->[2,2,3,[]] //сопоставляет "(a:b:c:xs)"
fn([2,2,3,4])->[2,2,3,[4]] //сопоставляет "(a:b:c:xs)"
fn([2,2])->[2,[2]] //сопоставляет "(x:xs)"
fn({a:1,b:'b'})->1 //сопоставляет "{a,b:'b'}"
fn({a:2,b:2})->[2,2]
fn({a:{aa:'aa'},b:'b'})->'aa'
fn(100)->100
//глобально эффективно
defun.globalScope.testfn=function(a){return a=="test"}
var fn = defun({
"x?array":true,
"x?object":false,
"x?testfn":'test'
});
fn([])->true
fn({a:1})->false
fn("test")->'test'
//текущий fn эффективен
var fn = defun({
"x?array":true,
"x?object":false,
"x?testfn":'test'
}{
"testfn":function(a){return a=="test"}
});
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )