我正在重写 PHP 类型系统并致力于实现更纯粹的语言。我正在尽可能多地实现纯粹主义作为功能性和面向对象的语言,如方法链、作为对象的类型、消息传递、作为方法的条件和一些其他特性http://github.com/haskellcamargo /生。在这里,函数将是 Func
类的实例,在我为它做一个转译器之后,因为 PHP 已经走到了现在。Func
将不限于将一元函数作为参数,但会在调用时检查参数的数量是否与预期参数的数量完全匹配:
$add = Func(function(Number $x) {
return Func(function(Number $y) use ($x) {
return $x -> add ($y);
});
});
其中 add 将是一个我不需要控制它的元数的函数,因为它是一元的并且通过柯里化工作。但是当我使用接收多个参数的函数时,我的问题就出现了。让我们以一个在屏幕上输出名称的简单函数为例:
$say_name = Func(function(String $name) {
$name -> outputln();
});
$say_name
需要1 个唯一参数,但我如何断言它将接收n 个参数,即这个匿名函数的数量?
$say_name -> invoke("Test");
可能有效,但$say_name -> invoke("Test", 1);
也有效,因为我没有办法了解匿名函数的数量。
function () { return func_num_args(); }
这将返回传递给它的参数数量。我需要知道所需参数的数量x
,例如:
function x(Int $i, Functor $j) { return a_magic_function_that_returns_it_all(); }
并输出我类似的东西array(2) { [0]=> Int [1]=> Functor }
。有人可以帮我吗?