代码之家  ›  专栏  ›  技术社区  ›  northpole

什么是全动力关闭?

  •  8
  • northpole  · 技术社区  · 14 年前

    前几天我参加了Scala的Java会议,演讲者提到了“全电源关闭”。我很难确定一个对我有意义的定义。我已经阅读了维基网页 closures 但它真的没有回答我。有人能帮我明确定义吗?甚至可以包括一个简单的例子。

    谢谢!

    4 回复  |  直到 14 年前
        1
  •  16
  •   Kim Stebel    14 年前

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

    你不需要超过维基百科文章中的这个句子。Java缺乏的(除了丑陋的语法)是从封闭外部绑定自由变量的特性。一个例子:

    int x = 0;
    new Runnable() {
        public void run() {
            x = 1;
        }
    }.run();
    

    这里Java编译器会抱怨变量X。

    在scala中,同样的功能也很好,而且不那么冗长:

    var x = 0
    val fun = ()=>{x=1}
    fun
    
        2
  •  9
  •   olle kullberg    14 年前

    因为我感觉自己是一个初学者(与dpp和amber相比),我可以用初学者的语言向初学者解释:

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

    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中调用。

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

    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
    

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

        3
  •  2
  •   Amber    14 年前

    说话人可能用“全功率”来表示“类似闭合”的反义词,这就是 many languages actually have .

        4
  •  1
  •   JacquesB    14 年前

    据我所知,全功能闭包并不意味着什么特别的东西,但它可能意味着:语法的简单性。在Java中使用匿名类内部类,使用类似的(a= & gt;a & lt;max)有一个不同的世界。也许能够对所有周围变量形成闭包,而不仅仅是最终变量。