【发布时间】:2015-03-08 15:17:30
【问题描述】:
我试图了解这两个 lambda 和闭包函数的用法。但不能正确理解。如果我能通过插图和细节理解它会很棒。
$array = array(12345, 'abcde');
$lambda = function($value) { return md5($value); };
$closure = function($value) use ($lambda) {
return 'MD5 Hash: ' . $lambda($value);//what is $lambda($value) here?
};
$result = array_map($closure, $array);
var_dump($result);
//array (size=2)
//0 => string 'MD5 Hash: 827ccb0eea8a706c4c34a16891f84e7b' (length=42)
//1 => string 'MD5 Hash: ab56b4d92b40713acc5af89985d4b786' (length=42)
【问题讨论】:
-
听起来让事情变得过于复杂...... $lambda 是一个回调,它返回一个 md5 哈希值; $closure 是一个回调,它调用指定的回调(在本例中为 $lambda),并且只添加一些文本......对于这样的事情,它只是看起来毫无意义的开销,因为你可以简单地做 @ 987654322@直接
-
@Mark Baker 谢谢。但只是为了了解 $closure 中发生了什么?特别是在 $lambda($value) 中?
-
$result = array_map($closure, $array);为数组中的每个元素调用回调$closure,$closure依次调用回调$lambda,$lambda为其部分返回元素值的md5哈希,$closure在将其作为修改后的元素值返回之前添加了一些文本