在Learn You A Haskell上,我读到了:
first :: (a, b, c) -> a first (x, _, _) = x second :: (a, b, c) -> b second (_, y, _) = y third :: (a, b, c) -> c third (_, _, z) = z
_
与列表推导中的含义相同。这意味着我们真的不在乎那部分是什么,所以我们只写一个_
。
PHP中也有类似的东西吗?如果是这样,它可以用于什么?如果没有,为什么开发人员选择不实施它?
答案 0 :(得分:1)
不,没有像PHP内置的那样。并没有太多需要类似的东西,因为PHP的功能特性现在(随着PHP 5.5的出现)才开始从童年开始成长。目前你没有看到很多接受回调的函数,另外lambda语法有点冗长,所以一个允许你更方便地声明lambdas的功能在有用性梯子上并不是很高。
在Haskell中_
是一种简写方式,可以说“这里有一个参数,但我并不关心它”,_
的每个外观都被视为不同< / em>彼此出现的参数。
允许您模拟此语法的一个PHP的怪癖是函数可以具有多个具有相同名称的参数:
// compiles with no problem!
function foo($param, $param, $param) {
echo $param;
}
foo(1, 2, 3); // prints 3
如果你想忽略函数的前两个参数,你可以这样做:
function foo($_, $_, $param) {}
但是,这对编译器来说没有什么特别之处,与使用参数的不同名称没什么不同。它不是惯用的PHP,很可能会使读者对此代码感到困惑。所以,虽然你可以做到,恕我直言,这不是一个好主意。
顺便说一句,在PHP中有一个地方允许您明确声明您不关心信息:list
构造。
$a = array(1, 2);
list($x, $y) = $a; // assigns $x = 1 and $y = 2
您可以在list
中跳过任意数量的参数,例如:
list(, $y) = $a; // assigns $y = 2, the first element is ignored
答案 1 :(得分:0)
你的意思是函数中的可选参数吗?你可以这样做:
function add($x = 1, $y = 1) {
return $x + $y;
}
add(4,5); //9
add(3); //4
注意:你不能只提供第二个参数而不是第一个参数,就像这样
add(_,4) //error!
不存在。