scala 函数方法、函数方法的实现原理
文章目录
- 1. 函数&方法
- 2. 函数&方法的实现原理
1. 函数&方法
scala中方法是类的一部分
,而函数是一个对象
,可以赋值给一个变量。scala 中的方法跟 Java 类似,方法是组成类的一部分。scala 中的函数则是一个完整的对象。类中的方法可以重载和重写,而函数没有重载和重写的概念,但是函数可嵌套使用
2. 函数&方法的实现原理
把上诉scala代码(main函数内部的嵌套函数test()
、T10类的方法test()
)编译为java
public final class T10$ {public static T10$ MODULE$;static {new T10$();}public void main(final String[] args) {Function1 function = test$1(10);int i = function.apply$mcII$sp(20);this.test(5);.MODULE$.println(BoxesRunTime.boxToInteger(i));}public void test(final int i) {.MODULE$.println("test方法");}private static final int inner$1(final int j, final int i$1) {return i$1 + j;}private static final Function1 test$1(final int i) {return (j) -> {return inner$1(j, i);};}private T10$() {MODULE$ = this;}// $FF: synthetic methodprivate static Object $deserializeLambda$(SerializedLambda var0) {return var0.lambdaDeserialize<invokedynamic>(var0);}
}//decompiled from T10.class
package com.cz.part5;import scala.reflect.ScalaSignature;@ScalaSignature(bytes = "\u0006\u0001U:Q!\u0002\u0004\t\u000251Qa\u0004\u0004\t\u0002AAQaF\u0001\u0005\u0002aAQ!G\u0001\u0005\u0002iAQAL\u0001\u0005\u0002=\n1\u0001V\u00191\u0015\t9\u0001\"A\u0003qCJ$XG\u0003\u0002\n\u0015\u0005\u00111M\u001f\u0006\u0002\u0017\u0005\u00191m\\7\u0004\u0001A\u0011a\"A\u0007\u0002\r\t\u0019A+\r\u0019\u0014\u0005\u0005\t\u0002C\u0001\n\u0016\u001b\u0005\u0019\"\"\u0001\u000b\u0002\u000bM\u001c\u0017\r\\1\n\u0005Y\u0019\"AB!osJ+g-\u0001\u0004=S:LGO\u0010\u000b\u0002\u001b\u0005!Q.Y5o)\tYb\u0004\u0005\u0002\u00139%\u0011Qd\u0005\u0002\u0005+:LG\u000fC\u0003 \u0007\u0001\u0007\u0001%\u0001\u0003be\u001e\u001c\bc\u0001\n\"G%\u0011!e\u0005\u0002\u0006\u0003J\u0014\u0018-\u001f\t\u0003I-r!!J\u0015\u0011\u0005\u0019\u001aR\"A\u0014\u000b\u0005!b\u0011A\u0002\u001fs_>$h(\u0003\u0002+'\u00051\u0001K]3eK\u001aL!\u0001L\u0017\u0003\rM#(/\u001b8h\u0015\tQ3#\u0001\u0003uKN$HCA\u000e1\u0011\u0015\tD\u00011\u00013\u0003\u0005I\u0007C\u0001\n4\u0013\t!4CA\u0002J]R\u0004"
)
public final class T10 {public static void test(final int i) {T10$.MODULE$.test(var0);}public static void main(final String[] args) {T10$.MODULE$.main(var0);}
}
可得到如下结论:
(1)所谓的函数,就是在对象中生成私有的静态的final
方法,并自动增加后缀
(2)所谓的嵌套函数,实际上是2个独立的方法互相调用
(3)所谓的方法,就是类中方法,无需进行任何改变
scala 函数方法、函数方法的实现原理相关推荐
- vue源码解析:vue生命周期方法$destory方法的实现原理
我们知道vue生命周期的最后一个阶段是销毁阶段,那么vue会调用自己的destory函数,那么$destory函数的实现原理是什么?且往下看. 用法: vm.$destroy() 作用: 完全销毁一个 ...
- python回调类_python 回调函数和回调方法的实现分析
回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事 ...
- 链式调用方法的实现原理和方法
1.什么是链式调用? Person person = new Person().setName(fog).setAge(18).setSex(man).setJob(software engineer ...
- sort排序方法的实现原理
sort 排序方法的实现原理 我们比较常用的是直接调用 JS的 sort方法,围绕原生 JS方法,并结合 V8排序的代码一起来分析,以便碰到类似的 JS排序问题时能够轻松应对. 在开始前请思考 ...
- jQuery 中 data 方法的实现原理
jQuery 中 data 方法的实现原理 前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQue ...
- JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏
new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...
- python退出时回调_python 回调函数和回调方法的实现分析
回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事 ...
- matlab中二维插值中cubic方法的实现原理(个人见解)
通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of 'nearest' ...
- matlab中内插cubic,matlab中二维插值中cubic方法的实现原理(个人见解)
通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of 'nearest' - Neare ...
最新文章
- iMeta期刊推特官方帐号@iMetaJournal上线
- HbuilderX跳转 / 定义快捷键
- Oracle表和表数据恢复
- html日期选择框_第十课 日期选择框(datepicker)的操作
- 科研项目 | 深度参与前沿课题研究,全英华人教授协会(ABCP)资深学者亲授
- oracle除了什么之外,Oracle翻译
- 解决Gerrit的git unpack error问题
- Tensflow的equal函数
- LNMP平台部署及应用
- python计算手机销量年增长率_Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析...
- mysql 数据库索引命名规范_MYSQL数据库命名及设计规范
- linux qemu的使用教程,详解QEMU网络配置的方法
- SpringBoot线程池获取service实例空指针
- PL3369C-ASEMI原边电源IC芯片PL3369C
- 2022年全国高中数学联赛二试几何题(A卷)详解
- Nginx实现高可用
- 电源芯片使能管脚EN的6种玩法,助力设计稳定可靠的电源
- java获取两个时间之间的所有日期、月份、年份,返回列表
- 打通MySQL架构和业务的任督二脉
- 360安全杀毒软件扫描计算机病毒吗,360杀毒软件全盘扫描杀毒教程
热门文章
- 总有你值得一试的python开源项目
- 受限玻尔兹曼机的基础知识二
- spine教程入门(不错的教程博客)
- java 60进制运算_JAVA利用位移进行进制转换
- 浅谈Java三层架构
- 用PyTorch来实现手写体数字识别
- 必备 免费人物虚幻模型素材网站
- 解决 error while loading shared libraries: libicui18n.so.63: cannot open shared object file
- 使用php mcrypt加密解密
- 基于Blinker ESP8266 远程电压电流、功率计、温湿度计、ADC接口测温、温控风扇、低电压保护、低压报警功能。用来监测我的太阳能充电。SSD1306可轮番显示电压信息和温度信息。APP图表