ABAP mesh expression, JavaScript and Scala expression
ABAP Mesh expression
JavaScript
我在第10行调用了函数f,其中传入的第二个和第三个参数都是一个逗号表达式。
函数f的实现,会检查这两个参数的类型,如果是函数,则执行函数调用,再打印其返回值,否则直接打印传入的表达式的值。
执行上面这段代码,打印输出如下:
我们可以看出,虽然传入的第一个参数为true,导致函数f内部只会打印第二个参数y代表的表达式的值,5,但是第三个参数代表的表达式在函数f调用时,也进行了表达式求值,所以最后console也输出了Big calculation2。
如果我们想实现所谓的“惰性求值”,有时候也称”惰性计算“,那么只需要将原本写在表达式位置的逻辑用一个JavaScript函数包裹起来,如下:
再次调用f,此时传入的参数y和z的类型为函数,因此在f进行调用时,同之前传入的表达式不同,这里并不会即时调用y和z代表的函数。打印输出:
Scala
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在Java虚拟机上,并兼容现有的Java程序。
Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
下图第5行和第12行我分别定义了两个Scala函数exp_test1和exp_test2, 逻辑和之前的JavaScript函数f类似。
exp_test1接受的第二个和第三个参数类型为exp1 :=> Unit,意思是需要传入一个表达式,这个表达式的返回类型是Unit。
exp_test2接收的第二个和第三个参数类型为exp1() :=> Unit,意思是需要传入一个函数,这个函数没有任何输入参数,函数的返回类型是Unit。
第19行到第25行是对这两个函数的各种测试,打印输出:
可以看到,即使传入两个函数exp_test1和exp_test2的第二个和第三个参数都是表达式,Scala也能做到对表达式的惰性求值:
第19行和第20行的函数调用,第三个参数位置的表达式和函数都没有即时求值,而是惰性求值。
第22行和第23行的函数调用,第二个参数位置的表达式和函数都没有即时求值,而是惰性求值。
本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Angular的scope. apply和CRM WebClient UI的modify方法
标题的两个方法作用相同。 Angular 在每一次Javascript代码执行序列执行结束后,Angular都去检查绑定的数据是否发生改变,通过调用scope.apply完成。scope. apply最后调用scope.digest()方法去更新bindings或者watchers。看个例子: 关于scope.apply的工作细节,see my blog Compare Data Binding mechanism: SAPUI5 and Angular: https://blogs.sap.com/2016/06/30/compare-data-binding-mechanism-sapui5-and-angular/ CRM WebClient UI 每次UI roundtrip结束之后,在UI框架DO_HANDLE_DATA的末尾会硬编码一行bol_core->modify(), 把BOL buffer里的change flush到Genil layer: 本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。
- 下一篇
SAP UI5和angular里的常量定义
SAP UI5 以我们以前负责的Opportunity为例,直接创建一个新的js文件,然后用所有字段为大写格式的JSON对象来模拟constant。UI5 framework也是用的这种方式。 Angular 用constant方法注入: app.constant('MONGOLAB_CONFIG', { baseUrl: '/databases/', dbName: 'ascrum' }); 在要使用这个常量的地方直接声明依赖,然后使用: Angular的常量注入有三种方式 // 在provider的构造器函数中直接声明常量依赖 module.provider('b', function BProvider(a) { this.$get = function() { return 'constant: ' + a; }; }); // 在service中声明常量依赖 module.service('aService', function(a) { // ...... }); // 定义在最后也没关系:常量注入任务会通过unshift操作放到任务队列的头部 module.constan...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7