zoukankan      html  css  js  c++  java
  • scala

    简单解释

    方法(method)
    在OOP中,方法作用于对象,是对象的行为,Java中的方法这样的,在Scala中的方法(method)也是如此,定义method的基本格式:
    def 方法名称(参数列表):返回值 = 方法体

    函数(function)
    在scala中,函数被看做是一等公民,定义函数基本格式:
    val f1 = (x: Int) => println(x) //打印
    val f2 = (x1: Int) => x1 + 4 //将原数据+4

    一些例子

    scala> def add3(x:Int) = x + 3
    add3: (x: Int)Int // 表示Method add3有一个参数Int型参数x,返回值是Int型.
    
    scala> add3(3)
    res0: Int = 6
    
    scala> val f1 = (x:Int) => x + 3
    f1: Int => Int = <function1> // 表示Function f1的method体接受一个Int型的参数,输出结果的类型是Int型。f1的类型是function1
    
    scala> f1(3)
    res1: Int = 6

    区别

    • 参数列表对method是可选的,对function是必须的(function参数列表可以为空)
    scala> def method = println("没有参数的方法")
    method: Unit
    
    scala> val function = () => println("没有参数的函数") // f2: () => Unit = <function0>
    scala> val function = => println("没有参数的函数") // 编译错误,参数列表可以为空,但不能省略
    
    • Method名意味着Method调用,Function名只是代表Function自身
    scala> method
    没有参数的方法
    
    scala> function
    res10: () => Unit = <function0>
    • 在需要function的地方可以提供一个method(它会自动转换成function,该行为被称为ETA expansion)
    // 高阶函数foreach接收的是一个函数,但也可以传入一个方法,scala会将这个方法自动转义成函数。
    // foreach是List对象的一个高阶函数,它接收一个函数,并应用于List中的每一个元素,而method是一个方法。
    def method(x: Any) = println(x)
    val list = List[String]("Scala", "Spark", "Java")
    list.foreach(method(_))

    注意:
    期望出现Function的地方,我们可以使用Method。
    不期望出现Function的地方,Method并不会自动转换成Function。

    在scala中操作符被解释成方法:

    前缀操作符:op obj 被解释称obj.op
    中缀操作符:obj1 op obj2被解释称obj1.op(obj2)
    后缀操作符:obj op被解释称obj.op

    可以在Method名后面加一个下划线强制变成Function。 注意: Method名与下划线之间至少有一个空格!!

    scala> def method1(x:Int) = { x + 84 }
    method1: (x: Int)Int
    
    scala> val function1 = method1 _
    function1: Int => Int = <function1>
    
    scala> function1(3)
    res5: Int = 87
    
    scala>
  • 相关阅读:
    UVA
    把.apk传到站点server下载
    2014腾讯实习生面试经历(重庆站)
    Phalcon 訪问控制列表 ACL(Access Control Lists ACL)
    Regular Expression Matching
    改动Androidproject的名称(非Eclipse重命名)
    Cocos2d-x3.2 LayerMultiplex使用说明
    BAT解密:互联网技术发展之路(5)- 开发层技术剖析
    使用xftp连接VirtualBox中的centos6.5
    【C语言】二维数组中的查找,杨氏矩阵
  • 原文地址:https://www.cnblogs.com/duchaoqun/p/d56aa807f7d592fc598bf8b5c7d8a8e6.html
Copyright © 2011-2022 走看看