すべては例から始まります。
w // () { function table(qIn = {}) { q["tit"] = "Wargana"; /** init- */ q["render"] = function(q){ }; qIn = merge(q, qIn); /** merge- */ if (q["m"] == "img") q = merge(q, img.table(qIn), qIn); if (q["m"] == "map") q = merge(q, gmap.table(qIn), qIn); q["render"](q); /** action- */ } } img // 1 () { function table(qIn = {}) { q["render"] = function(q) { return "img" + qIn["tit"]; }; return q; } } gmap // 2 () { function table(qIn = {}) { q["render"] = function(q) { return "map" + qIn["tit"] + this.markers(qIn); } return q; } function markers(qIn = {}) { q["layer"] = function(q) { }; qIn = merge(q, qIn); if (q["layerM"] == "cadastr") q = merge(q, cadastr.markers(qIn), qIn); return q; } } cadastr // 2.1 () { function markers(qIn = {}) { q["layer"] = function(q) { return "cadastr"; } return q; } } /** client-, */ w.table({m : "img"}) w.table({m : "map", layerM : "cadastr"}) w.table({m : input("tableM"), layerM : input("gmapLayerM")})
コードの説明
- パラメータのデフォルト。 initセクションは、actセクションの安全な操作を保証するためにパラメーターのデフォルト値を設定します。 同時に、マージセクションでは、actセクションのパラメーター化を任意にオーバーライドできます。
q = merge(q, ..., qIn);
マージリストの最後にあるのは、クライアントの最高の力を保証することです。コードがそれ自体をパラメーター化するのがどれほど困難であっても、クライアントは常に「独自のゲームに課す」ことができます。
Init-Merge-Actスキームの主なものはInit-Actリンケージであり、Mergeはセカンダリです。
function some(qIn = {}) { q["render"] = function(q){ return 1; }; q = merge(q, qIn); return q["render"](q); }
究極の系譜:
function some(){ q["render"] = function(q){ return 1; }; return q["render"](q); }
ゼロへの出力:
function some(){ return 1; }
- メッシュプラグイン。 「Init-Merge-Act」の原則を使用すると、コード構造を任意のレベルのネストに編成できます。これは、merge() 'aの引数もIMAの原則に基づいているためです。
インターフェース
function some(){ q["isGrab"] = 0; q = merge(q, plugSome(q)); } function plugSome(qIn = {}) { q["isGrab"] = 1; q = merge(q, qIn); return q; }
up-host some()のinit-sectionは、デフォルトでisGrabパラメーターを使用してact-section (この場合はまったくない)の安全な動作を保証し、同時にmerge-sectionで接続されているすべてのプラグインのインターフェースを設定します 。
この事前ヒープの例は、関数でのIMAプラグイン化を示しています。プラグインに渡されるqパラメーターは、上記の最高のクライアントパワーの保証を提供します。 もちろん、いつでも、qで事前変換を実行することでこのパワーを制限することも、プラグイングリッドでqのダウン包含を完全に放棄することもできます。
名前空間
共有バス上のメッシュプラグインは、プラグインサブネット全体に対して単一の名前空間を作成し、一方で、異なるホストで同じ署名を再利用する可能性を作成します。
modHost { function a(){ q["isGrab"] = 0; } function b(){ q["isGrab"] = 0; } }
これにより、 modHost.isGrabA、modHost.isGrabBを入力する必要がなくなります。
一方、ほとんどのカムチャッカグリッドプラグイン(グリッド作成者が許可している場合)でさえ、パラメーター化アップトレース全体のリソースを使用して、コンテキストロジックに応じた動作を構築できます。
神経系を落ち着かせるのはいつでも妄想的で、ネイムスペイゾビーのギャップを調整し、タイヤの前の合流を放棄することができます:
function a(){ q["isGrab"] = 0; q = merge(q, b(q)); } function b(qPro = {}) { q["isGrab"] = !qPro["isGrab"]; ; /* q = merge(q, qIn); */ return q; }
タイピング
アルゴリズムのモデリングをモジュールレベルから実行フローのレベルに減らしたため、タイプの選択は、すでに選択されているタイプのパラメーター化とまったく同じパラメーターになります。
if (input.getM() == "img") imgW.table({width : 50})
対
w.table({m : input("m"), width : 50})
ホスト(上位レベルの意味の単位として)はより小さく、より多くのパラメーターになります。
戦略
機能を追加する方法
- お母さんのホストからinitセクションをコピーして貼り付けます。
- 娘のプラグインホストを作成し、そこにママホストのinitセクションのスケルトンを挿入します。
- 各パラメーターを再フラッシュするか、デフォルト値が適切な場合はそれを捨てます。
- 母親のホストのマージセクションで、娘のホストに条件付きマージを追加します。
- クライアントセクションでは、使い慣れたホストの新しい追加パラメーターを使用します。
機能を削除する方法
- マージセクションで娘をママから切断します。
- ホスト娘をこすります。
クロスマージの方法
function some(qIn = {}) { // init- q["total"] = 15; // merge- // q = merge(q, someA(), someB(), qIn); qA = someA(); qB = someB(); qPro["total"] = q["total"] + qA["total"] + qB["total"] + qIn["total"]; q = merge(a, qA, qB, qIn, qPro); // act- }