"Magento PHP Developer's Guide"的第2章指出:
Zend Framework 2使用100%面向对象的代码并利用PHP 5.3的大多数新功能,即命名空间,后期静态绑定,lambda函数和闭包.
虽然帖子'封闭'和'lambda'之间有什么区别?有一些答案(例如,一个lambda只是一个匿名函数,并且一个闭包是一个可以访问不在其参数列表中的变量的函数),似乎特定于Python编程语言(有一些提到Scheme编程语言).例如,根据帖子,在Python中,似乎可以有不是lambdas的闭包,而不是闭包的lambdas.
但是,我对PHP编程语言感兴趣,而不是Python.下面的答案之一似乎指出,在PHP中,所有闭包都是lambdas,这与与Python相关的帖子相冲突.
在我看来,这些概念在语言和语言的细节上有所不同,我对PHP感兴趣,因此这篇文章.
所有这一切都令人困惑.虽然我认为lambda函数通常只是未命名的函数,但下面的维基百科文章更多地讨论了闭包:
http://en.wikipedia.org/wiki/Closure_%28computer_science%29
虽然在PHP中没有例子.
在Python中,假设我有一个函数f,我想传递一些辅助参数(为简单起见,它只是第一个保持变量的参数).
这两种方式(如果有的话)之间有什么区别?
# Assume secondary_args and secondary_kwargs have been defined
import functools
g1 = functools.partial(f, *secondary_args, **secondary_kwargs)
g2 = lambda x: f(x, *secondary_args, **secondary_kwargs)
Run Code Online (Sandbox Code Playgroud)
例如,在doc页面中partial,有这样的引用:
partial在类中定义的对象的行为类似于静态方法,并且在实例属性查找期间不会转换为绑定方法.
如果用于从提供给类的参数(在构造函数中或稍后通过函数)中创建类方法,lambda方法是否会受此影响?
我目前正在浏览Java Lambda并发现它也称为Closures.
请问它有什么原因也称为闭包?我想要一个技术解释.
什么是PHP或JavaScript中的Closures/Lambda外行术语?一个例子对我的理解很有帮助.我在讨厌Lambda和Closures是一回事吗?
我正和朋友讨论关闭,他认为(partial + 5)是关闭.但我认为闭包是一个关闭自由变量的函数
(let [a 10]
(defn func1 [x] (+ x a))
)
Run Code Online (Sandbox Code Playgroud)
然后func1是一个关闭.但在这种情况下5不是自由变量.那么哪个是正确的答案?
我正在寻找一个跳过when块执行的语句,类似于breakfor循环.这可能吗?
我想要避免的是一个类似的结构:
case n
when 1
if valid
foo.bar
end
when 2
if valid
foo.foo
end
Run Code Online (Sandbox Code Playgroud)
更理想的代码块看起来像:
case n
when 1
break unless valid
foo.bar
when 2
break unless valid
foo.foo
end
Run Code Online (Sandbox Code Playgroud)
显然,break不起作用.
我在http://en.wikipedia.org/wiki/Closure_(computer_science)找到了以下定义
在编程语言中,闭包(也称为词法闭包或函数闭包)是一个函数或对函数的引用以及引用环境——存储对每个非局部变量(也称为自由变量或上值)的引用的表那个功能。[1] 闭包——与普通的函数指针不同——允许函数访问那些非局部变量,即使在其直接词法范围之外调用。
所有场合都是这样吗?不能 lambda 函数(那些创建闭包的函数)继续引用调用 lambda 时超出范围的局部变量吗?这不是GO的行为吗?
PS:我仍然想知道他们为什么使用“lambda”一词
为此得到了答案 https://cstheory.stackexchange.com/questions/18443/lambda-term-usage-in-programming
以下帖子可能对其他读者有所帮助,
我正在尝试使用laravel-eloquent来获取特定日期之后的房间和预订.
$fdate='2015-01-05';
$roomdata=Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query){
$query->where('bookstart','>',$fdate);
}))
->get();
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误说$fdate未定义.但是,当我这样做
$query->where('bookstart','>','2015-01-05');
Run Code Online (Sandbox Code Playgroud)
这非常有效.这有什么原因吗?有人能为这个问题提供一个好的解决方案吗?