Java与Scala中的闭包

  [color=red]原文地址[/color]:[url=http://java.dzone.com/news/closures-java-and-scala]Closures in Java and Scala[/url]
  [color=indigo]翻  译[/color]:[url=http://eastsun.iteye.com]Eastsun[/url]


  [color=cyan]People argue that verbose code is easier to understand. Do you agree when reading these two examples, one method in Java, one in Scala?[/color]
  人们普遍认为,详细的代码更易于理解。但如果你阅读下面两段代码--一个使用Java另一个使用Scala--你是否还这样认为呢?
public List<Item> bought(User user) {
List<Item> result = new ArrayList();
for (Item item : currentItems) {
if (user.bought(item)) {
result.add(item);
}
}
return result;
}

[code]def bought(user: User) = items.filter(user bought _)[/code]

  [color=cyan]If you are familiar with Java, which is more likely then you being familiar with [url=http://www.scala-lang.org]Scala[/url], you may tend to the Java-version. Scala has a different syntax for declaring types and generics, and supports closures, including anonymous parameters (the underscore).[/color]
  如果你熟悉Java,那么很可能你将会了解到[url=http://www.scala-lang.org]Scala[/url]。也许你会倾向于使用Java的版本。Scala具有不同的类型声明以及泛型语法,并且支持闭包,以及匿名参数(下划线)。

  [color=cyan]When Closures are introduced in one of the next Java releases, JDK 7 or 8, the example could be rewritten like this:[/color]
  在Java的后续版本中引入闭包后(JDK7或JDK8),上面Java版的代码可以重写为:
public List<Item> bought(User user) {   
return ListUtils.filter(Item item : items ) {
user.bought(item);
}
}

  Or with [url=http://www.jroller.com/scolebourne/entry/java_7_extension_methods]extension methods[/url]:
  或者使用[url=http://www.jroller.com/scolebourne/entry/java_7_extension_methods]方法扩展[/url]:
public List<Item> bought(User user) { 
return items.filter(Item item : ) {
// <-- note the smily! thats what its all about!
user.bought(item);
}
}

  [color=cyan]The interesting differences between Java with closures and Scala is the static typing: Scala inferences that items are all of type Item, so there is no need to specify that information again.
[/color]
  带有闭包的Java与Scala一个让人感兴趣的区别是它们的静态类型:Scala的类型推断能力能得到其所有变量的类型,因此不需要再指明这一点。

  [color=cyan]So, while the current [url=http://javac.info]Java Closures specification [/url]is a great step in the right direction, [url=http://michaelhuettermann.blogspot.com/2008/03/dr-neil-gafter-jugc-and-vip.html]lead by Neil Gafter[/url], who is quite the right man for the job, it may not be worth to wait for it, if you have the choice. Its not even sure yet that we'll see that spec implemented in JDK7, and even that is at best one and a half year away.[/color]
  因此,即便目前的[url=http://javac.info]JAVA闭包规范[/url]在[url=http://michaelhuettermann.blogspot.com/2008/03/dr-neil-gafter-jugc-and-vip.html]Neil Gafter的领导下[/url]正朝着正确的方向做出了很大的进步;但我们也未必需要去等待它,如果我们已经有了其他选择。何况JDK7中会不会实现闭包现在还没有确定--即便是,那也至少是一年半以后的事了。
RK3576+IMX415 MIPI摄像头零拷贝显示系统 MIPI CSI-2是嵌入式视觉系统中主流的高速图像传感器接口标准,其核心价值在于低延迟、高带宽与硬件级DMA直通能力。基于V4L2子系统与DRM/KMS驱动栈,可构建从传感器RAW数据到帧缓冲区的零拷贝通路,显著降低CPU负载并提升实时性。该技术广泛应用于工业检测、边缘AI推理前数据接入及多路同步采集等场景。本文以Rockchip RK3576 SoC和索尼IMX415传感器为典型组合,详解MIPI物理层适配、内核驱动集成、GStreamer零拷贝管道搭建及systemd服务化部署,覆盖从硬件信号完整性到 阅读详情

相关推荐

[XJTUSE DATABASE]——第三章 关系数据库标准语言SQL

新年了,来个大的,写了好几天,将近9000字,希望对大家有所帮助

weixin_47692652的博客 3121

Scala 浅谈scala闭包与java回调函数

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在PHP、Scala、Scheme、Common Lisp、Smalltalk、

残缺的歌的专栏 1990

EtherCAT主站SOEM -- 29 -- STM32F767-SOEM通过 CSP模式(周期同步位置模式)控制一个电机转圈圈

以上就是EtherCAT主站SOEM – 29 – STM32F767-SOEM通过 CSP模式(周期同步位置模式)控制一个电机转圈圈的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 2243

Scala闭包和Java闭包

Scala 闭包   函数在变量不处于其有效作用域时,还能对变量进行访问。下面举例说明: // 定义函数,它的返回值是一个匿名函数 def getFunc(msg : String) = (name : String) => println(msg + "," + name) // 定义两个函数变量 val fuc1 = getFunc("hello") val fuc2 = getFu...

zlx_code的专栏 431

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2800

FPGA/IC 秋招笔试/面试题总结

文章目录一、FPGA内部资源1. 什么是FPGA2.FPGA内部资源二、同步时钟、同步/异步电路1.同步时钟2.同步/异步电路三、同步复位/异步复位1.同步复位2. 异步复位3. 异步复位同步释放四、同步FIFO/异步FIFO1.同步FIFO2.异步FIFO五、FIFO最小深度计算1.FIFO最小深度2.示例分析六、逻辑电平1.TTL电平标准2.LVTTL电平标准3.CMOS电平标准4.LVCOMS电平标准5.RS2326.RS4857.ECL、PECL、LVPECL8.LVDS9.CML10.GTL11

Crazzy_M的博客 4万+

Scala闭包使用与理解

闭包的理解,开发java的同学需要转个弯理解,以下例子很好的解释了一个简单闭包的使用。 在java中可以理解为一个内部的函数,在scala中直接简化为一个内部函数了。 这个内部函数可以直接作为结果返回给调用者;其实和工厂方法有点类似,根据入参数的值,返回不通的对象,这儿是返回不同的方法: package com.atguigu.wc object ClosePackage { de...

wzh8108的专栏 507

R语言dplyr包recode函数、recode_factor函数数值或因子替换实战

R语言dplyr包recode函数、recode_factor函数数值或因子替换实战 目录 R语言dplyr包recode函数、recode_factor函数数值或因子替换实战 #导入dplyr包 #recode函数进行数值替换 #recode_factor函数对因子变量进行替换 #导入dplyr包 install.packages("dplyr") # Install & load dplyr library("dpl.

data+scenario+science+insight 1592

Scala 中闭包的概念

闭包的实质就是代码与用到的非局部变量的混合,即: 闭包 = 代码 + 用到的非局部变量 例如,我们定义一个值函数 sum: 此时 Scala 解释器提示找不到 y 这个值,这是因为我们根本就没有定义 y 这个变量,所以 Scala 解释器不知道 y 究竟是什么内容。接下来我们定义一个变量 y : 现在已经不再报错了,直接调用值函数 sum: 此时 sum 函数的值是6

u011653701的专栏 1万+

Video Diffusion Models:基于扩散模型的视频生成

Diffusion Models专栏文章汇总:入门与实战 前言:扩散模型已经被广泛运用到图像生成、image-to-image转换、时间序列生成、3D点云生成、文本生成、音频生成等领域,谷歌研究院最新的研究成果成功将diffusion models运用到视频生成领域。 目录 模型结构 分解时空体系联合训练 梯度条件法 恐怖的实验结果 论文和代码 个人启发 个人疑问? 模型结构 在前面的博文中,我详细介绍了为什么绝大部分的diffusion models都使用Unet结构.

沉迷单车的追风少年 6671

win10解决IE浏览器安装不上的问题(卸载依然显示不能安装)

目前win10 系统不支持外部ie安装程序,所以必须用win10自带的应用来安装 一、错误的卸载的方式 在控制面板的当前安装的程序界面是看不到ie的,需要选择控制面板左上角的启用或关闭windows功能 将ie11前面的勾勾去掉 这种方法是很多网站上的误区,其实这并没有卸载成功ie只是把ie的功能关闭了,但是他还在你的电脑上。你可以理解为我们说的对文件夹执行的隐藏文件夹功能。那个隐藏的文件夹依...

清平乐的技术专栏 3万+

Scala函数值和闭包

函数值 具有多参数的函数值 CurryHua

Java&&大数据专栏 3089

如何通过单步调试的方法,找到 SAP Gateway 到底把 Fiori 应用发送的 OData 请求,投递到哪一台 ABAP 后台服务器了?

这是一个 Count 请求,得到服务器响应的数据是 204,这个 204 会以数字的形式,显示在 Fiori Launchpad tile 上。那如果当前 Gateway 系统可以连接到多台 ABAP 后台服务器,比如下图所示,可以连接 SAP S/4HANA,ERP 或者 SAP CRM,我怎么知道 SAP UI5 应用上显示的数据,到底来自哪一台 ABAP 后台服务器呢?,就是上图 ABAP 调试器里断点停留的位置,即 SAP Frontend 服务器,通过 RFC 将 OData 请求投递给。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 645

Java,Scala中的闭包与内部类

spark等程序中,可能会遇到闭包序列化问题,想要从根本上理解和解决这些问题,需要理解何为闭包,闭包范围如何确定。

Cool0的博客 419

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java 序列化和Scala的闭包的区别和注意点

本文分析了Spark中DataSourceScanExec因动态分区裁剪导致的NPE问题,核心在于maxMetadataValueLength字段的序列化机制。文章指出,该字段在序列化时会保存整数值而非引用对象,解释了为何Executor反序列化时不会报错。同时探讨了Java序列化原理和Scala闭包特性,建议通过预计算值避免闭包引用外部对象。文章结合具体代码示例,说明了如何通过调整变量作用域来优化序列化行为,解决Spark中的NPE问题。

monkeyboy_tech的博客 498

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java与scala的选择问题

scala与java之间的那些事   scala与java之间的关系,我认为可以用一句话来开头:scala来源于java,但又高于java。   scala的设计者Martin Odersky就是一个JAVA控,这位牛人设计了javac和编写了jdk中的通用代码。可以说java语言本身就是Martin Odersky一步一步看着长大的。所以...

chixushuchu的博客 402

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

闭包 Scala学习笔记-面向对象篇

以前一直不知道什么叫闭包,网上找了半天也没明白,只知道闭包的定义: 代码+非局部变量 = 闭包代码好理解,那什么时非局部变量呢? 首先我们定义一个种树的方法:def plantATree(treeName:String)={ var high= 0 val taller(meter:Int)={ high += meter println("大家好,我是"+tree

wzq294328238的专栏 682

java闭包和内部类的区别_闭包与内部类

闭包与内部类中英文社区中,比较常见的对闭包的定义是引用了自由变量的一段代码或函数,被引用的自由变量和函数(一段代码)共同存在,即使离开了创造它的环境内部类按照我的理解,scala/java中虽然并不存在语法级地支持或是定义,对于闭包而言,一些概念和闭包的概念一致。一般理解scala中的一些概念,我会倾向于从Java开始。Java中的内部类在java中,内部类有:成员内部类静态内部类局部内部类匿名内...

weixin_28909441的博客 278

Scala 与 Java 的交互操作

这个章节主要讲解Scala和Java进行互操作。 Javap 类 异常 Trait 对象 闭包函数(closures functions) Javap javap是JDK附带的一个工具,而不是JRE。它们之间还是有差别的。Javap反编译class文件,并且向你展示它里面放的是什么。使用起来很简单。 [loc...

大数据基础入门教程 357

scala 闭包和柯里化

文章目录一、闭包:函数式编程的标配 一、闭包:函数式编程的标配 从 Java 问题引申闭包 在 Java 中,匿名函数不能访问外部变量 public static void main(String[] args) { int i = 10; Thread t1 = new Thread() { @Override public void run() ...

Java_Road_Far的博客 707

闭包与内部类

中英文社区中,比较常见的对闭包的定义是引用了自由变量的一段代码或函数,被引用的自由变量和函数(一段代码)共同存在,即使离开了创造它的环境 内部类 按照我的理解,scala/java中虽然并不存在语法级地支持或是定义,对于闭包而言,一些概念和闭包的概念一致。一般理解scala中的一些概念,我会倾向于从Java开始。 Java中的内部类 在java中,内部类有: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类 class Outer1{ private int a1;

Anthony的专栏 373

Scala学习7之scala与java不同之总结3-特质和接口

1.scala和java为了避免出现菱形继承的问题,都只能继承一个类,但都可以继承多个特质(scala)或者接口(java); java中使用接口interfere,接口里面只能包含抽象方法,不能包含字段,也不能包含具体的方法; 而scala使用的是特质trait,既可以包含抽线方法,也可以包含具体方法;而且在trait中,抽象方法不用abstract声明 ,子类继承时也不用override

Keep Learning 2210

《Java8实战》读书笔记13:Java8 与 Scala

见识一下 与 做个对比 。 这是官方提供的在线环境用于新手了解Scala :https://scastie.scala-lang.org/ scala3 如下:(莫非强制加返回类型?) 直接看个截图吧: 用于完成到的。 声明,可读写。 声明,是只读的。 可显示声明变量类型。不过Scala可以替你推断变量的类型。 2. 不可变与可变的比较 的集合只读`的。(Scala并未强制你必须使用不可变集合,只是各种暗示你接受这种风格) 可见其推荐的 就是将变化部分创建副本,并引用无变化的部分。得到

灵台方寸山斜月三星洞 732

《Java8实战》笔记(15):面向对象和函数式编程的混合-Java 8和Scala的比较(1)

给大家送一个小福利附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。Java 8和Scala都是整合了面向对象编程和函数式编程特性的编程语言,它们都运行于JVM之上,在很多时候可以相互操作。Scala支持对集合的抽象,支持处理的对象包括List、Set、Map、Stream、Option,这些和Java 8非常类似。不过,除此之外Scala还支持元组。

2401_84002482的博客 497

Scala入门 闭包、尾递归、控制抽象

这是一个简单的应用案例,但是涉及的内容比较多(闭包、递归、控制抽象),前两个Java中也无法实现,第三个在该案例是一个容易犯错的地方。

m0_73968016的博客 687

Lambda与闭包

写本文的目的是通过javascript/c++11/java8/python/scala等几种语言对lambda和闭包的支持的对比,探讨下lambda和闭包的区别与联系,以及作用域的trick。在阅读这篇文章前,首先熟悉以下几个概念(有些概念不会谈,只是和本文所谈的lambda和闭包对比理解),摘自维基百科:--Closure-- In programming languages, closures

feilengcui008的专栏 1954
上一篇: JSR 308:Java语言复杂度在恣意增长?
下一篇: 金庸小说另类标题
JavaSxy
博客等级 码龄21年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值