首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是全动力闭合?

什么是全动力闭合?
EN

Stack Overflow用户
提问于 2010-07-17 23:49:14
回答 4查看 1.4K关注 0票数 8

前几天我参加了一个关于Scala的Java会议,演讲者提到了“全功率闭包”。我很难确定一个对我有意义的定义。我看过closures上的维基页面,但它真的没有帮我回答。有没有人能帮我下个明确的定义?也许甚至包括一个简单的例子。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-18 02:25:20

在计算机科学中,闭包是具有绑定在词法环境中的自由变量的一类函数。

你只需要维基百科文章中的这句话就行了。Java缺少的(除了丑陋的语法之外)是从闭包外部绑定自由变量的特性。举个例子:

代码语言:javascript
复制
int x = 0;
new Runnable() {
    public void run() {
        x = 1;
    }
}.run();

在这里,Java编译器会报错变量x。

同样的事情在scala中也能很好地工作,而且不那么冗长:

代码语言:javascript
复制
var x = 0
val fun = ()=>{x=1}
fun
票数 16
EN

Stack Overflow用户

发布于 2010-07-18 02:40:31

由于我觉得自己是一个初学者(与DPP和Amber相比),我可能会用初学者的语言向初学者解释:

首先,匿名函数(或代码块/lambda表达式)只是一个没有名称的函数。它可以绑定到像这样的变量。

代码语言:javascript
复制
scala> val foo = (x: Int) => 2*x 
foo: (Int) => Int = <function1>

scala> val bar = foo
bar: (Int) => Int = <function1>

scala> bar(5)
res2: Int = 10

你看,这个函数没有名字foo,它可以从bar中调用。

其次,闭包是一个匿名函数,它有一个没有在函数内部定义的变量(变量/值必须在定义函数之前声明)。术语“全动力关闭”可能指的是这种功能。

代码语言:javascript
复制
scala> var constant = 7
constant: Int = 7

scala> val foo = (x: Int) => 2*x + constant
foo: (Int) => Int = <function1>

scala> foo(5)
res3: Int = 17

scala> constant = 6
constant: Int = 6

scala> foo(5)
res4: Int = 16

第一次看到这个,你可能想知道它有什么好处。简而言之,它有许多应用领域:-)

票数 9
EN

Stack Overflow用户

发布于 2010-07-18 00:06:47

说话者可能用了“全能”来表示与“闭合”相反的意思,这就是many languages actually have

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3272183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档