我正在重寫PHP類型系統並致力於實現更純粹的語言。我儘可能地將純粹主義視爲功能性和麪向對象的語言,如方法鏈,類型爲對象,消息傳遞,條件方法和其他一些功能http://github.com/haskellcamargo/rawr。在這裏,函數將是Func
類的實例,之後我將爲它做一個反編譯器,因爲PHP已經走到了盡頭。 Func
不會限制到一元函數的參數,但會檢查是否被調用時,參數的數目相匹配正是預期參數的數量:第一類函數的函數構造
$add = Func(function(Number $x) {
return Func(function(Number $y) use ($x) {
return $x -> add ($y);
});
});
附加在哪裏將是一個功能,我不需要控制自己的身份,儘管它是一元的,並通過咖啡的作品。但是當我使用接收多個參數的函數時,我的問題就出現了。讓我們爲例如一個簡單的功能,在屏幕上輸出一個名字:
$say_name = Func(function(String $name) {
$name -> outputln();
});
$say_name
需要1唯一的參數,但我怎麼能斷言,它將獲得ñ參數,是ñ的元數這個匿名函數?
$say_name -> invoke("Test");
可能工作,但$say_name -> invoke("Test", 1);
也有效,因爲我沒有辦法知道匿名函數的arity。
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 }
。有人可以幫助我嗎?