CakePHP 3 コントローラ実行までのプロセスを追う 前編の続きです。
index.php
に残されたのは次の5行です。
CakePHP 3 コントローラ実行までのプロセスを追う 前編の続きです。
index.php
に残されたのは次の5行です。
CakePHP 3 で コントローラ が実行されるまでのプロセス、 前処理 がどうなっているのか気になって調べました。 予想以上に追いかけるのが大変だったので簡単に済ませたところがいくつもあります。 きっとこの記事を読むのも大変だと思います。
続きを読む CakePHP 3 コントローラ実行までのプロセスを追う 前編CakePHP 3 の ビルトインサーバ の実態がなんなのか気になったので 調べました。 php bin/cake.php server
で動くサーバです。
haskell で ruby の split や PHP の explode にあたるようなものを考えました。
haskell を使ったことがなく、使う場面もなかなかないので CodeIQ で使ってみようと思ったものの、 「入力を受け取るにはどうすればいいんだ?」という疑問にぶちあたり、 split する方法を考えました。
Haskell には Data.List.Split
モジュール内 に splitOn
という関数があるのですが、 CodeIQ でコンパイルに失敗しました。 Ideone でも コンパイルに失敗しました。 ほかにも関数はあるそうなのですが、うまくいかなかったので自分で考えることにしました。
下のようになりました。 この方法だと カンマ でのみ区切ります。
1 2 3 4 5 6 7 8 9 10 |
split = _split [] _split ts "" = ts _split ts s = _split (ts ++ [(token s)]) (drop (length(token s) + 1) s) token = _token "" _token ys "" = ys _token ys (x:xs) = do if x == ',' then ys else _token (ys ++ [x]) xs |
任意のデリミタを指定できるようにしてみました。 1文字のデリミタでのみ分割可能です。
1 2 3 4 5 6 7 |
split d = _split d [] _split d cs "" = cs _split d cs s = _split d (cs ++ [token d s]) (drop (length(token d s) + 1) s) token d = _token d "" _token d t "" = t _token d t (x:xs) = if (x == d) then t else _token d (t ++ [x]) xs |