zoukankan      html  css  js  c++  java
  • thunk函数

    1.函数参数求值的策略

      a.传值策略(c语言)

        传值策略就是在进入函数体之前将 参数计算之后 将参数的值传入到函数体之中。 

    let x = 8
    f(x + 1)//参数为
    f(9)//传进去的值实际上为9
    

      

      b.传名策略(Hskell语言)

    f(x + 1)//传进函数体的仍然为x +1,进入函数体之前不会对其进行求值
    

      传名策略避免了对无用的参数的计算

    编译器的"传名调用"实现,往往是将参数放到一个临时函数之中,再将这个临时函数传入函数体。这个临时函数就叫做 Thunk 函数。

    function f(m){
      return m * 2;     
    }
    
    f(x + 5);
    
    // 等同于
    
    var thunk = function () {
      return x + 5;
    };
    
    function f(thunk){
      return thunk() * 2;
    }

    上面代码中,函数 f 的参数 x + 5 被一个函数替换了。凡是用到原参数的地方,对 Thunk 函数求值即可。

    这就是 Thunk 函数的定义,它是"传名调用"的一种实现策略,用来替换某个表达式。

    2.js是传值策略,它的thunk函数的含义为将一个多参函数,转化为一个个单参函数

    //原函数为
    fs.readFile('path', callback)
    将其转化为
    readFile = (path) => (callback)  => fs.readFile(path, callback)
    
    let readFileFunc = readFile('./1.json')
    //readFileFunc = (callback) => fs.readFile(path, callback)(path为'./1.json')
    
    let callback = (err,data) => {……}
    
    readFileFunc(callback)//fs.readFile(path, callback)
    

      

  • 相关阅读:
    天兔监控系统安装
    day6
    day5
    day4
    day3
    day2
    day1
    几个重要的Xenomai相关链接
    树莓派GPIO中断驱动程序
    转了一圈,再读LKD
  • 原文地址:https://www.cnblogs.com/ranjianxi/p/6807557.html
Copyright © 2011-2022 走看看