在发了博文之后,我又花了一些时间尝试解决这个问题……经过几次尝试之后,我找到了另一种pattern,括号并不再是必要的了:
复制代码 代码如下:
eval(function () {
var s = '', ww = [v] > (s += v);
var ws = [n] > ww(' <A href="#">(' + n + ')</A> ');
pnView3(14, [n] > ww(' [' + n + '] '),
1, 37,
ws, [] > ww(' ... '),
2, 1
);
document.write(s);
} .lamda0());
不过,由于运算符优先级的关系,比较、门、赋值等运算符仍然不能直接写在(伪)Lambda表达式中。
也就是说
复制代码 代码如下:
function(a, b){ a == b }
仍然需要写成
复制代码 代码如下:
[a, b] > (a == b)
另外,选择的pattern本身是具有实际效果的——当把一个数组和另一样东西进行比较的时候,脚本引擎会先尝试把两边都转化成数值,如果不成功就转化成字符串再比较。
不过我想正常情况下应该很少有人会拿数组跟别的东西这么比——所以甚至不需要主动去避免,只要用不到(伪)Lambda表达式的时候不特意去这样用就没问题了。
新的实现代码如下:
复制代码 代码如下:
/*!
L-amda "a-Lambda", a module provides Alternate "Lambda" style programming ability for JavaScript.
Created By NanaLich. 2010-09-10
This module is published under WTFPL v2, so you just DO WHAT THE Fxxx YOU WANT TO with it.
*/
!function () {
function attachEntry(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 = /"(?:\\[\s\S]|[^\x22])*"|'(?:\\[\s\S]|[^\x27])*'|([^\s\w]\s*)\[(\s*|\s*[A-Z$_][\w$]*\s*(?:,\s*[A-Z$_][\w$]*\s*)*)\]\s*(>)\s*(\(?)/gi;
var xy = /[\n\r),;\]}]|$/.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 translateLambda(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 r;
} catch (ex) { // 失败,返回原文
return s;
}
};
var lamdaAliases = ["translateLambda", "lambda", "lamda"];
attachEntry(String, lamdaAliases, translateLambda);
attachEntry(String.prototype, lamdaAliases, function () { return translateLambda(this); });
var funPrototype = Function.prototype;
attachEntry(Function, lamdaAliases, function (func) { return translateLambda('0,' + func); });
attachEntry(funPrototype, lamdaAliases, function () { return translateLambda('0,' + this); });
var lamda0aliases = ['lambdaInit', 'lambda0', 'lamda0'];
attachEntry(Function, lamda0aliases, function (func) { return translateLambda('!' + func + '()'); });
attachEntry(funPrototype, lamda0aliases, function () { return translateLambda('!' + this + '()'); });
} ();
这次为函数增加了专门的方法,去掉了之前蹩足的判断、也增加了新方法稍微简化调用过程;
修正了有额外空格时无法判断期望语法成分的BUG。
另外由于Codeplex再次抽疯,这次还是没有下载。
相关推荐:
ChatGPT一经发布,便受到了用户的狂热追捧,引爆人工智能热潮,十代ai达人办公本
seo稿件是什么意思,seo文章写作要求 ,ai写作未来展望和展望
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
ChatGPT点不了?背后的真相与解决方法,ai.520523
ChatGPTO1Pro模型:开启AI新纪元,免费应用带来无尽可能,苹果上的ai写作在哪里
seo适用于什么领域,seo适用于什么领域中 ,ai智能翻译写作机器人v1.0
SEO留痕:数字营销的隐性力量,如何通过SEO优化让品牌更具竞争力,铁岭网站关键词建设优化
AI写作技巧,让创作事半功倍!
SEO全站优化:打造强大网站排名的必备利器,AI论文写作的优点
GoogleSEO打满分自然流量会高吗?揭开SEO优化的真相,猪插画ai
seo软件叫什么,seo软件视频教程 ,eps ai 缩略图
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
ChatGPT无法打开?这些解决办法让你重新畅享智能对话!,北大写作ai
seo相当于什么职业,seo相当于什么职业类别 ,usatisfy ai
创作新时代:自动生成文章AI的魅力与未来
ChatGPT无法加载?检查您的网络设置并尝试重启ChatGPT,解决您的使用困扰!,ai光晕制作
怎样用AI写文章?快速高效创作新技能!
自动生成文章的AI软件,助力内容创作的未来
打造内容创作新时代:有言AI生成助力创作者释放灵感
SEO外链技巧:提升网站排名的秘密武器,ai视频生日祝福
SEO译为:网站排名背后的优化策略,会展中心网站优化
AI.生成重新定义创造力的新纪元
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
ChatGPT维护页面-背后的技术与用户体验,ai领域ppt
seo需要什么人才,seo需要做什么工作 ,探索ai照片
GPT-3.5免费吗?揭秘AI智能助手的未来与收费模式,ai 美美
ChatGPT的超链接点不开?解决方法一网打尽!,情感ai写作指令是什么
SEO网:让你的数字营销更加精准高效,开启网络引流新时代,丰县互联网网站推广优势
AI智能软件:未来科技的核心力量
SEO站在未来之巅,助力网站在激烈竞争中脱颖而出,推荐网站优化欢迎咨询
在线AI文章生成:智能写作的无限可能
seo用什么写属性写,seo属于什么 ,芭田科学施肥AI
如何用AI写公众号文章?让创作更高效、更轻松
什么是SEO优化方案,seo的优化方案 ,ai emorobot
ChatGPT崩一次多久修复?揭秘背后的技术与保障,ai1818818
seo点击工具,seo排名点击软件推荐 ,ai狂躁
SEO在线服务-让您的网站快速跃升至搜索引擎前列,江西小红书营销推广案例
二SEO是什么,h二seo三是什么 ,ai手术机
SEO范例:如何通过优化提升网站流量,获取更多商机,广州抖音seo搜索广告
SEO外链建设:提升网站排名的关键策略,ai偏执
ChatGPT安装包Windows版:让AI助力你的工作与生活,人工智能ai不是梦在线
怎么让AI写文章,轻松实现内容创作的智能化
AI自动读文:让阅读更轻松、更高效的智能革命,寄ai空
GPT在智能聊天机器人中的作用:重塑沟通体验,开创智能未来,百万级ai
自动AI写文章:轻松创作时代的全新利器
中文润色:提升表达的艺术,打造无懈可击的语言魅力,广告营销推广新思路论文
一秒采集:提升效率、创造价值的秘密武器,苏州网站整站优化
优化投入,让企业更具竞争力,怎样推广营销方案
360排名优化价格:打造高效网络营销的制胜法宝,ai换脸刘浩存自wei
SEO快速优化排名:助你网站跃升搜索引擎首页,ai彩虹立体9怎么做