文章目录

  • 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 函数方法、函数方法的实现原理相关推荐

  1. vue源码解析:vue生命周期方法$destory方法的实现原理

    我们知道vue生命周期的最后一个阶段是销毁阶段,那么vue会调用自己的destory函数,那么$destory函数的实现原理是什么?且往下看. 用法: vm.$destroy() 作用: 完全销毁一个 ...

  2. python回调类_python 回调函数和回调方法的实现分析

    回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事 ...

  3. 链式调用方法的实现原理和方法

    1.什么是链式调用? Person person = new Person().setName(fog).setAge(18).setSex(man).setJob(software engineer ...

  4. sort排序方法的实现原理

    sort 排序方法的实现原理   我们比较常用的是直接调用 JS的 sort方法,围绕原生 JS方法,并结合 V8排序的代码一起来分析,以便碰到类似的 JS排序问题时能够轻松应对.   在开始前请思考 ...

  5. jQuery 中 data 方法的实现原理

    jQuery 中 data 方法的实现原理 前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQue ...

  6. JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏

    new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...

  7. python退出时回调_python 回调函数和回调方法的实现分析

    回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事 ...

  8. matlab中二维插值中cubic方法的实现原理(个人见解)

    通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of         'nearest'   ...

  9. matlab中内插cubic,matlab中二维插值中cubic方法的实现原理(个人见解)

    通过查找matlab的帮助程序,对离散数据格网化采用的方法有如下5种: griddata(..., METHOD) where METHOD is one of 'nearest'   - Neare ...

最新文章

  1. iMeta期刊推特官方帐号@iMetaJournal上线
  2. HbuilderX跳转 / 定义快捷键
  3. Oracle表和表数据恢复
  4. html日期选择框_第十课 日期选择框(datepicker)的操作
  5. 科研项目 | 深度参与前沿课题研究,全英华人教授协会(ABCP)资深学者亲授
  6. oracle除了什么之外,Oracle翻译
  7. 解决Gerrit的git unpack error问题
  8. Tensflow的equal函数
  9. LNMP平台部署及应用
  10. python计算手机销量年增长率_Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析...
  11. mysql 数据库索引命名规范_MYSQL数据库命名及设计规范
  12. linux qemu的使用教程,详解QEMU网络配置的方法
  13. SpringBoot线程池获取service实例空指针
  14. PL3369C-ASEMI原边电源IC芯片PL3369C
  15. 2022年全国高中数学联赛二试几何题(A卷)详解
  16. Nginx实现高可用
  17. 电源芯片使能管脚EN的6种玩法,助力设计稳定可靠的电源
  18. java获取两个时间之间的所有日期、月份、年份,返回列表
  19. 打通MySQL架构和业务的任督二脉
  20. 360安全杀毒软件扫描计算机病毒吗,360杀毒软件全盘扫描杀毒教程

热门文章

  1. 总有你值得一试的python开源项目
  2. 受限玻尔兹曼机的基础知识二
  3. spine教程入门(不错的教程博客)
  4. java 60进制运算_JAVA利用位移进行进制转换
  5. 浅谈Java三层架构
  6. 用PyTorch来实现手写体数字识别
  7. 必备 免费人物虚幻模型素材网站
  8. 解决 error while loading shared libraries: libicui18n.so.63: cannot open shared object file
  9. 使用php mcrypt加密解密
  10. 基于Blinker ESP8266 远程电压电流、功率计、温湿度计、ADC接口测温、温控风扇、低电压保护、低压报警功能。用来监测我的太阳能充电。SSD1306可轮番显示电压信息和温度信息。APP图表