• [Javascript] Other functor


    EventStream:

    You can use RxJS, BaconJS or any reactive programming lib you want:

    var id_s = map(function(e) { return  '#'+e.id }, Bacon.fromEventTarget(document, "click"))
    var element_s = map(document.querySelector, id_s)
    //=> EventStream(Element)
    
    element_s.onValue(function(el) { alert('The inner html is ' +el.innerHTML) })

    Here using BaconJS; we need to call onValue to subscribe stream.

    Future:

    It is "lazy", you must fork it.

    var makeHtml = function(post){ return "<div>"+post.title+"</div>"};
    var page_f = map(makeHtml, http.get('/posts/2'))
    
    page_f.fork(function(err) { throw(err) },
                    function(page){ $('#container').html(page) })
    console.clear();
    var _ = R;
    var P = PointFree;
    var map = P.fmap;
    var compose = P.compose;
    var Maybe = P.Maybe;
    var Identity = P.Id;
    
    
    
    
    
    
    // Exercise 1
    // ==========
    // Use _.add(x,y) and map(f,x) to make a function that increments a value inside a functor
    console.log("--------Start exercise 1--------")
    
    var ex1 = map(_.add(1))
    
    
    assertDeepEqual(Identity(3), ex1(Identity(2)))
    console.log("exercise 1...ok!")
    
    
    
    
    
    // Exercise 2
    // ==========
    // Use _.head to get the first element of the list
    var xs = Identity(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
    console.log("--------Start exercise 2--------")
    
    
    var ex2 = map(_.head);
    
    
    assertDeepEqual(Identity('do'), ex2(xs))
    console.log("exercise 2...ok!")
    
    
    
    
    
    
    // Exercise 3
    // ==========
    // Use safeGet and _.head to find the first initial of the user
    var safeGet = _.curry(function(x,o){ return Maybe(o[x]) })
    var user = {id: 2, name: "Albert"}
    console.log("--------Start exercise 3--------")
    
    var ex3 = compose(map(_.head), safeGet('name'));
    
    
    assertDeepEqual(Maybe('A'), ex3(user))
    console.log("exercise 3...ok!")
    
    
    
    
    
    
    // Exercise 4
    // ==========
    // Use Maybe to rewrite ex4 without an if statement
    console.log("--------Start exercise 4--------")
    
    var ex4 = function(n) {
      if(n){
        return parseInt(n);
      }
    }
    
    
    var ex4 = compose(map(parseInt),Maybe)
    
    
    assertDeepEqual(Maybe(4), ex4("4"))
    console.log("exercise 4...ok!")
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    // TEST HELPERS
    // =====================
    function inspectIt(x){
      return (x.inspect && x.inspect()) || (x.toString && x.toString()) || x.valueOf(); //hacky for teachy.
    }
    
    function assertEqual(x,y){
      if(x !== y){ throw("expected "+x+" to equal "+y); }
    }
    function assertDeepEqual(x,y){
      if(x.val !== y.val) throw("expected "+inspectIt(x)+" to equal "+inspectIt(y));
    }
  • 相关阅读:
    ssh访问控制,多次失败登录即封掉IP,防止暴力破解
    经常用到的一些命令行
    自定义控件
    委托线程三部曲(引用)
    关于委托
    三个调用的例子(转)
    同一网段的两台电脑通信(转)
    SOCKET原理(转载)
    C#winform和百度API互动-----之JS读取中C#中的函数
    C#winform和百度API互动-----之读取中js的参数
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5862639.html
Copyright © 2020-2023  润新知