Scala基础 - 函数和方法的区别
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. 参考文档:
- Scala Functions vs Methods
- Why does it compile successfully while pass only one parameter to currying function?
转载于:https://my.oschina.net/joymufeng/blog/652310
Scala基础 - 函数和方法的区别相关推荐
- python基础学习——函数和方法的区别与联系
以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨. 函数 函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用. 独立的函数是函数(像 ...
- python函数和方法概念_python基础学习——函数和方法的区别与联系
以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨. 函数 函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用. 独立的函数是函数(像 ...
- python中函数和方法的区别
本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析. (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函 ...
- python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法
python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录
- Django 函数和方法的区别
函数和方法的区别 1.函数要手动传self,方法不用传 2.如果是一个函数,用类名去调用,如果是一个方法,用对象去调用 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662 ...
- JavaScript变量、属性、函数、方法的区别(1)
1.变量和属性的区别 2.函数和方法的区别 以下是代码演示:
- javaScript函数和方法的区别
函数和方法的区别 1)函数(function)是一段代码,通过名字来进行调用.它能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值.2)方法(method)是通过对象调 ...
- disp语句怎么格式 matlab_Matlab中disp和sprintf函数使用方法和区别介绍
Matlab中disp和sprintf函数使用方法和区别介绍 作者:小安 来源:PC下载网时间:2020-08-17 17:48:55 相信各位都知道的,Matlab自带很多函数,用处各不相同,当中, ...
- js中 函数和方法的区别:转载于黑泽君
js中 函数和方法的区别 在javascript中的解释为: 函数(function)是可以执行的javascript代码块,由javascript程序定义或javascript实现预定义.函数可以带 ...
最新文章
- LeetCode简单题之有序数组中出现次数超过25%的元素
- [转载]“java.sql.SQLException:指定了无效的 Oracle URL”
- 安装配置Statspack
- 旋转目标检测rotation-yolov5笔记
- 窗体DataGridView控件中按回车键时,单元格向下移动,如何能改成向右移动
- springmvc学习笔记(19)-RESTful支持
- 303. 区域和检索 - 数组不可变
- 码云上传代码添加标签_第一次使用Git Bash Here 将本地代码上传到码云
- 手机屏幕适配原理及实现
- Linux的sort命令
- Javascript(二)——函数(重载、回调)与作用域(附图解)
- sdoi2017 r1 不堪回首
- 怎么搞一个ORM出来用用呢???迷茫中
- Linux创建多个进程
- 【C语言】学习gotoxy() 与 clrscr() 函数
- 与京东物流合作,能不能补全东方甄选的最后一块拼图?
- 房多多Q2营收同比下降46%:亏损同比扩大8.9倍,股价再创新低
- 如何用excel实现并列排序
- 2017 php 免费空间,免费空间免费php空间
- linux显卡可以sli吗,驱动设置 开启SLI功能_显卡_显卡技术应用-中关村在线