维基百科上的Scala关闭
发布时间:2020-12-16 18:57:56 所属栏目:安全 来源:网络整理
导读:在 wikipedia上的 Closure页面上找到以下代码段 //# Return a list of all books with at least 'threshold' copies sold.def bestSellingBooks(threshold: Int) = bookList.filter(book = book.sales = threshold)//# ordef bestSellingBooks(threshold: In
在
wikipedia上的
Closure页面上找到以下代码段
//# Return a list of all books with at least 'threshold' copies sold. def bestSellingBooks(threshold: Int) = bookList.filter(book => book.sales >= threshold) //# or def bestSellingBooks(threshold: Int) = bookList.filter(_.sales >= threshold) 纠正我,如果我错了,但这不是关闭?它是一个函数文字,一个无常的函数,一个lambda函数,但不是一个闭包? 解决方法
好吧,如果你想成为技术,这是一个函数文字,它在运行时被翻译成一个闭包,关闭开放术语(将它们绑定到函数文字的范围内的val / var).此外,在这个函数文字(_.sales> = threshold)的上下文中,threshold是一个自由变量,因为函数文字本身并没有给它任何意义.本身,_.sales> = threshold是一个开放术语在运行时,它每次调用函数时绑定到函数的局部变量.
以此函数为例,生成闭包: def makeIncrementer(inc: Int): (Int => Int) = (x: Int) => x + inc 在运行时,以下代码生成3个闭包.还有趣的是,b和c不是相同的闭包(b == c给假). val a = makeIncrementer(10) val b = makeIncrementer(20) val c = makeIncrementer(20) 我仍然认为在维基百科上给出的例子是一个很好的例子,尽管不完全覆盖整个故事.这是非常困难的,通过最严格的定义给出了实际关闭的一个例子,而实际上没有运行程序的内存转储.它与类对象关系是一样的.您通常通过定义一个类Foo {…然后使用val f = new Foo实例化它来表示对象的示例,说f是对象. – Flaviu Cipcigan 笔记: >参考:Scala中的编程,Martin Odersky,Lex Spoon,Bill Venners>使用Scala版本2.7.5.final在Java 1.6.0_14上运行的代码编译. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |