코드 복사 코드는 다음과 같습니다.
/*!
L-amda "a-Lambda" 모듈은 JavaScript에 대한 대체 "Lambda" 스타일 프로그래밍 기능을 제공합니다.
NanaLich가 제작했습니다. 2010-09-10
이 모듈은 WTFPL v2에 따라 게시되었으므로 원하는 Fxxx 작업을 수행하면 됩니다.
*/
!function () {
function attachmentEntry(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 ? ' 중' : ''));
}
attachEntry(RegExp, ['clone'], rxClone);
attachEntry(RegExp.prototype, ['clone'], function () { return rxClone(this); });
functiontranslateLambda(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) ');'
new Function(t); r = m[1] 'function(' m[2] '){ 'translateLambda(t) ' }' // 翻译里面的内容
x.lastIndex = l = q k; // 下一次查找从当前边界之后开始
break
} catch (ex) { }
}
if (!q) l = p // 说明找不到右括号或者有效的代码,直接附加所有匹配的内容
}
try {
r = s.substr(l);
new Function(r) // 语法测试
return
} catch(예: ) { // 失败,返回原文
return s;
}
};
var lamdaAliases = ["translateLambda", "lambda", "lamda"]; lamdaAliases,translateLambda);
attachEntry(String.prototype, lamdaAliases, function () { returntranslateLambda(this); });
var funPrototype = Function.prototype;
attachEntry(Function, lamdaAliases, function (func) { returntranslateLambda('0,' func); });
attachEntry(funPrototype, lamdaAliases, function () { return analyzeLambda('0,' this); });
var lamda0aliases = ['lambdaInit', 'lambda0', 'lamda0'];
attachEntry(Function, lamda0aliases, function (func) { returntranslateLambda('!' func '()'); });
attachEntry(funPrototype, lamda0aliases, function () { return analyzeLambda('!' this '()'); });
} ();
另外由于Codeplex再次抽疯,这次还是没有下载。