2019独角兽企业重金招聘Python工程师标准>>>

1. 函数和方法

在Scala中函数是一等公民,你可以像操作数字一样将函数赋值给一个变量。使用val语句可以定义函数,def语句定义方法:

class Test{def m(x: Int) = x + 3val f = (x: Int) => x + 3
}

在Scala中无法直接操作方法,如果要操作方法,必须先将其转换成函数。有两种方法可以将方法转换成函数:

val f1 = m _

在方法名称m后面紧跟一个空格和下划线告诉编译器将方法m转换成函数,而不是要调用这个方法。 也可以显示地告诉编译器需要将方法转换成函数:

val f1: (Int) => Int = m

通常情况下编译器会自动将方法转换成函数,例如在一个应该传入函数参数的地方传入了一个方法,编译器会自动将传入的方法转换成函数。

2. 两者的区别

可以直接调用函数上的方法,而方法却不行,例如:

f.toString //编译通过
m.toString //编译失败

3. Currying函数和Currying方法

Currying函数可以只传入部分参数返回一个偏函数(partially applied function, 也叫部分应用函数),而Currying方法在转换成偏函数时需要加上显式说明,让编译器完成转换:

object TestCurrying {def invoke(f: Int => Int => Int): Int = {f(1)(2)}def multiply(x: Int)(y: Int): Int = x * ydef main(args: Array[String]) {invoke(multiply)//编译器会自动将multiply方法转换成函数val partial1 = multiply(1) //尝试将Currying方法转换成偏函数导致编译失败val partial2 = multiply(1): (Int => Int) //编译通过val f        = multiply _  //将multiply方法转换成函数fval partial3 = f(1)        //只应用第1个参数返回偏函数,编译通过}
}

4. 参考文档:

  1. Scala Functions vs Methods
  2. Why does it compile successfully while pass only one parameter to currying function?

转载于:https://my.oschina.net/joymufeng/blog/652310

Scala基础 - 函数和方法的区别相关推荐

  1. python基础学习——函数和方法的区别与联系

    以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨. 函数 函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用. 独立的函数是函数(像 ...

  2. python函数和方法概念_python基础学习——函数和方法的区别与联系

    以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨. 函数 函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用. 独立的函数是函数(像 ...

  3. python中函数和方法的区别

    本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析. (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函 ...

  4. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  5. Django 函数和方法的区别

    函数和方法的区别 1.函数要手动传self,方法不用传 2.如果是一个函数,用类名去调用,如果是一个方法,用对象去调用 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662 ...

  6. JavaScript变量、属性、函数、方法的区别(1)

    1.变量和属性的区别 2.函数和方法的区别 以下是代码演示:

  7. javaScript函数和方法的区别

    函数和方法的区别 1)函数(function)是一段代码,通过名字来进行调用.它能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值.2)方法(method)是通过对象调 ...

  8. disp语句怎么格式 matlab_Matlab中disp和sprintf函数使用方法和区别介绍

    Matlab中disp和sprintf函数使用方法和区别介绍 作者:小安 来源:PC下载网时间:2020-08-17 17:48:55 相信各位都知道的,Matlab自带很多函数,用处各不相同,当中, ...

  9. js中 函数和方法的区别:转载于黑泽君

    js中 函数和方法的区别 在javascript中的解释为: 函数(function)是可以执行的javascript代码块,由javascript程序定义或javascript实现预定义.函数可以带 ...

最新文章

  1. LeetCode简单题之有序数组中出现次数超过25%的元素
  2. [转载]“java.sql.SQLException:指定了无效的 Oracle URL”
  3. 安装配置Statspack
  4. 旋转目标检测rotation-yolov5笔记
  5. 窗体DataGridView控件中按回车键时,单元格向下移动,如何能改成向右移动
  6. springmvc学习笔记(19)-RESTful支持
  7. 303. 区域和检索 - 数组不可变
  8. 码云上传代码添加标签_第一次使用Git Bash Here 将本地代码上传到码云
  9. 手机屏幕适配原理及实现
  10. Linux的sort命令
  11. Javascript(二)——函数(重载、回调)与作用域(附图解)
  12. sdoi2017 r1 不堪回首
  13. 怎么搞一个ORM出来用用呢???迷茫中
  14. Linux创建多个进程
  15. 【C语言】学习gotoxy() 与 clrscr() 函数
  16. 与京东物流合作,能不能补全东方甄选的最后一块拼图?
  17. 房多多Q2营收同比下降46%:亏损同比扩大8.9倍,股价再创新低
  18. 如何用excel实现并列排序
  19. 2017 php 免费空间,免费空间免费php空间
  20. linux显卡可以sli吗,驱动设置 开启SLI功能_显卡_显卡技术应用-中关村在线

热门文章

  1. UIView - CAGradientLayer
  2. 关于MySQL分表操作的研究
  3. lnmp+lamp编译后,编译参数查看
  4. 缺少ntstrsafe.lib kndis5mp.lib解决办法
  5. WIN7下VS2005 VS2008 SQLSERVER2005安装顺序
  6. 因情制宜,建立“适当”的索引
  7. PHP如何获取用户IP地址
  8. 一步一步利用django创建博客应用(三)
  9. IE浏览器下常见的CSS兼容问题
  10. ADB通过WiFi连接手机调试Android应用