コードをコピーします コードは次のとおりです:
/*!
L-amda「a-Lambda」モジュールは、JavaScript に代替「Lambda」スタイルのプログラミング機能を提供します。
ナナリッチによって作成されました。 2010-09-10
このモジュールは WTFPL v2 で公開されているため、Fxxx で必要なことを行うだけです。
*/
!function () {
functionattachEntry(o, a, m) {
var i, j, n;
o = [].concat(o);
while (i = o.shift()) {
for (j in a) {
if (!i[n = a[j]]) i[n] = m;
}
}
}
var xx = /"(?:\[sS]|[^x22])*"|'(?:\[sS]|[^x27]) *'|([^sw]s*)[(s*|s*[A-Z$_][w$]*s*(?:,s*[A-Z$_][w$]*s*)* )]s*(>)s*((?)/gi;
var xy = /[nr),;]}]|$/.source;
function rxClone(rx) {
return new RegExp(rx.source, (rx.global ? 'g' : '') (rx.ignoreCase ? 'i' : '') (rx.multiline ? ' m':''));
}
attachEntry(RegExp, ['clone'], rxClone);
attachEntry(RegExp.prototype, ['clone'], function () { return rxClone(this); });
function translationLambda(s) {
var m, l = 0, r = '', x = xx.clone(); // firefox、safari などの完全なローカルマッチングの正表式の拡張のため、ここでは重複しない正表表式の例を採用しています。
while (m = x.exec(s)) {
var h = m[0];
switch (h.charAt(0)) { // 判断期待的语法成分
case '$': // 関数数传参
case ')':
case ']':
case '"': // 一致到了字符串
case "'":
Continue; //以上皆跳过
}
var p, q, t, k = m[ 4].length, y = new RegExp(k ? '\)' : xy, 'g');
r = s.substring(l, p = m.index); // 在结果文字列上附加前の残りの内容
y.lastIndex = l = p h.length; // 以降の開始寻找右記号またはその他の記号
while (q = y.exec(s)) {
q = q.index;
try {
t = 'return(' s.substring(l, q) ');'; // 语法测试
r = m[1] 'function(' m[2] '){ ' translationLambda(t) ' }'; // 翻译里面の内容
x.lastIndex = l = q k; // 下一次查找从当前边界之后開始
break;
} catch (ex) { }
}
if (!q) l = p; // 说明找不到右括号或者有效的代码,直接附加全部一致する内容
}
try {
r = s.substr(l);
new Function(r); // 语法测试
return
} catch (ex ) { // 失败、返還文
return s;
}
var
var lamdaAliases = ["translateLambda", "lambda"
attachEntry(String, lamdaAliases、translateLambda);
attachEntry(String.prototype, lamdaAliases, function () { return translationLambda(this); });
var funPrototype = Function.prototype;
attachEntry(Function, lamdaAliases, function (func) { return translationLambda('0,' func); });
attachEntry(funPrototype, lamdaAliases, function () { return translationLambda('0,' this); });
var lamda0aliases = ['lambdaInit', 'lambda0', 'lamda0'];
attachEntry(Function, lamda0aliases, function (func) { return translationLambda('!' func '()'); });
attachEntry(funPrototype, lamda0aliases, function () { return translationLambda('!' this '()'); });
} ();
次は関数数増加了专门的方法、去掉了前蹩足的判断、また追加新方法稍微简化调用过程;
修正了有额外空格時無法判断期待语法
さらに、Codeplex が再度解凍されたため、今回もダウンロードされていません。