在 PHP 中柯里化 in_array()

Currying in_array() in PHP

不一定对PHP如何做这个或任何事情有问题,更多只是出于好奇的问题。我熟悉函数式编程,但绝不是专家。我目前正在编写函数,虽然我不要求它们具有功能性,但将来可能会改变。所以我说最好做好准备。

我的问题是,您如何柯里化 in_array 这样的函数?

据我了解,我们有两个参数,needlehaystack

调用函数时似乎都需要。

我们必须在函数的开头就知道我们要搜索的数组,还必须知道我们要搜索的是什么。

对我来说,似乎很难强制执行任何部分应用程序或柯里化解决方案,我们可能会在以后知道其中一个或另一个。

我想你可以有一个非泛型函数,你可以在函数中指定 needle。我确实在 Google 中看到了一些关于飞溅的内容。如果要求重写函数并对其进行柯里化,您将如何处理?我知道我指定了 PHP 但我想只要规格相同,任何语言都很好。

嗯,它在 PHP 中相对简单 - 几乎与将函数视为值的任何其他语言相同。 For example:

function create_search_by_array($arr) {
  return function($needle) use ($arr) {
    return in_array($needle, $arr);
  };
}

$search_in_1_to_10 = create_search_by_array(range(1, 10));
var_dump($search_in_1_to_10(1)); // true
var_dump($search_in_1_to_10(10)); // true
var_dump($search_in_1_to_10(11)); // false

这里唯一需要注意的是 use ($arr) 构造:没有它,内部函数将无法从外部范围看到相应的变量。