1

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中也有类似的东西吗?如果是这样,它可以用来做什么?如果不是,为什么开发人员选择不实施它?

4

2 回答 2

1

不,PHP 中没有类似的东西。并且没有太多需要类​​似的东西,因为 PHP 的功能特性现在(随着 PHP 5.5 的出现)才刚刚开始从童年时代发展出来。目前,您还没有看到很多接受回调的函数,而且 lambda 语法有些冗长,因此允许您更方便地声明 lambdas 的功能在有用性阶梯上并不是很高。

在 Haskell_中是“这里有一个参数,但我不关心它”的简写方式,每个外观都_被认为是彼此不同的参数。

允许您模拟这种语法的 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
于 2013-06-18T10:00:07.713 回答
0

您是指函数中的可选参数吗?你可以这样实现:

function add($x = 1, $y = 1) {
  return $x + $y;
}

add(4,5); //9
add(3); //4

注意:您不能只提供第二个参数而不提供第一个参数,就像这样

add(_,4) //error!

不存在。

于 2013-06-18T09:55:24.847 回答