Scala中名词的解释

Scala中名词的解释

柯里化

  • 解释
    • 在计算机科学中,柯里化(Currying),又译为卡瑞化或加里化,是把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术
  • 普通加和函数

     

    //函数实现
    function add(a,b){
        return a+b;
    }
    
    //函数调用
    add(1,2);
    
  • 采用柯里化

     

    //函数实现
    var add=function(a){
        return function(b){
            return a+b; 
        }
    }
    
    //函数调用
    add(3)(5);
    
  • 其实实质就是闭包的概念,柯里化所要表达的就是:如果你固定某些参数,你将得到接受剩余参数的一个函数;这就是求值策略中的部分求值策略。

闭包

  • 闭包就是一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!
  • 看下面的函数例子

     

    //函数实现
    function lazy_sum(arr){
        var sum=function(){
            retrun arr.reduce(function(x,y){
                return x+y;
            });
        }
        return sum;
    }
    //调用函数
    var f=lazy_sum([1,2,3,4,5]);
    
  • 在上述的函数中,在lazy_sum函数中定义了sum函数,并且函数num可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum函数返回函数sum时,相关参数和变量都保存在返回的函数中,这种成为“闭包”(Closure)的程序结构拥有极大的威力。
  • 闭包应用的两种情况

    1. 函数作为返回值

      •  

        //函数定义
        function fn(){
            var max=10;
            return function bar(x){
                if(x>max){
                    console.log(x);
                }
            }
        }
        
        //函数使用
        var f1=fn();
        f1(15);
        
      • 如上代码,bar函数作为返回值,赋值给f1变量。执行f1(15)时,用到了fn作用域下的max变量的值
    2. 函数作为参数传递

      •  

        var max=10;
        fn=function(x){
            if(x>max){
                console.log(x);
            }
        }
        
        (function(f){
            var max=100;
            f(15);
        })(fn);
        
      • 如上代码,fn作为一个参数被传递进另一个函数,赋值给f参数,执行f(15)时,max变量的取值是10,而不是100

字面量

  • 字面量(literal)是用于表达源代码中一个固定值表示法;
  • 字面量是指由字母,数字等构成的字符串或者数值,它只能作为右值出现,(右值是指等号右边的值,如int a=123,这里的a为左值,123为右值)
  •  

    int a=10; //10为int类型字面量
    

scala中的val,var,def

  • val类似java中的final变量,一旦初始化了,就不能再赋值
  • var,与val正好相反,可以在生命周期被多次赋值
  • def定义一个方法
    • 见到这样的代码别让它迷惑了【add其实就是函数,sum是函数的返回值】

       

      var sum=12;
      def add=sum; 
      

Scala中的单例对象

  • Scala单例对象是十分重要的,没有像在java一样,有静态类、静态成员、静态方法,但是Scala提供了objec对象,这个object对象类似于java的静态类,它的成员、它的方法默认都是静态的

Scala伴生对象

  • 如果有同样一个类与object名字一样,则称该object为该类的伴生对象,相应的,该类为object的伴生类。如果一个类有它的伴生对象,这个类就可以通过object的名字访问到所有成员,但object不在该类的作用范围。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风御浪云帆之上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值