찾다
웹 프론트엔드JS 튜토리얼JavaScript에는 Lambda 표현식 프로그래밍 기능(향상된 버전)_javascript 기술과 유사한 코드가 있습니다.

블로그 게시물을 게시한 후 이 문제를 해결하기 위해 시간을 보냈습니다... 몇 번의 시도 끝에 괄호가 더 이상 필요하지 않은 또 다른 패턴을 발견했습니다: ​​

코드 복사 코드는 다음과 같습니다.

eval(function () {
var s = '', ww = [v] > ; (s = v);
var ws = [n] > ww(' (' n ') '); [n] > ww(' [' n '] '),
1, 37,
ws, [] > ww(' ... '),
2, 1
);
document.write(s);
} .lamda0());

그러나 연산자 우선 순위, 비교, 할당 및 기타 연산자 간의 관계로 인해 여전히 (의사) 람다 표현식에 직접 작성할 수 없습니다.


코드 복사 코드는 다음과 같습니다.
함수( a, b) { a == b }

은 여전히 ​​

[a, b] > (a == b)


또한 선택한 패턴 자체에도 실질적인 효과가 있습니다 - 배열을 다른 것과 결합할 때 스크립트 엔진은 먼저 양쪽을 숫자 값으로 변환하려고 시도합니다. 실패하면 문자열로 변환한 다음 비교합니다.
하지만 일반적인 상황에서는 배열을 이와 같은 다른 것과 비교하는 사람이 거의 없을 것이라고 생각합니다. 따라서 의도적으로 사용하지 않는 한 배열을 적극적으로 피할 필요조차 없습니다. (의사) 람다 표현식이 필요합니다. 더 이상 문제가 없습니다.

새 구현 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다.

/*!
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再次抽疯,这次还是没有下载。
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
lambda 表达式在 C++ 中如何处理异常?lambda 表达式在 C++ 中如何处理异常?Apr 17, 2024 pm 12:42 PM

在C++中,使用Lambda表达式处理异常有两种方法:使用try-catch块捕获异常,并在catch块中处理或重新抛出异常。使用std::function类型的包装函数,其try_emplace方法可以捕获Lambda表达式中的异常。

C++ lambda 表达式中闭包的含义是什么?C++ lambda 表达式中闭包的含义是什么?Apr 17, 2024 pm 06:15 PM

在C++中,闭包是能够访问外部变量的lambda表达式。要创建闭包,请捕获lambda表达式中的外部变量。闭包提供可复用性、信息隐藏和延迟求值等优势。它们在事件处理程序等实际情况中很有用,其中即使外部变量被销毁,闭包仍然可以访问它们。

用 C++ lambda 表达式实现多线程编程的优势是什么?用 C++ lambda 表达式实现多线程编程的优势是什么?Apr 17, 2024 pm 05:24 PM

lambda表达式在C++多线程编程中的优势包括:简洁性、灵活性、易于传参和并行性。实战案例:使用lambda表达式创建多线程​​,在不同线程中打印线程ID,展示了该方法的简洁和易用性。

C++ lambda 表达式如何捕获外部变量?C++ lambda 表达式如何捕获外部变量?Apr 17, 2024 pm 04:39 PM

在C++中捕获外部变量的lambda表达式有三种方法:按值捕获:创建一个变量副本。按引用捕获:获得变量引用。同时按值和引用捕获:允许捕获多个变量,按值或按引用。

如何使用 C++ lambda 表达式执行延迟求值?如何使用 C++ lambda 表达式执行延迟求值?Apr 17, 2024 pm 12:36 PM

如何使用C++lambda表达式执行延迟求值?使用lambda表达式创建延迟求值的函数对象。延迟计算推迟到需要时才执行。仅当需要时才计算结果,提高性能。

C++ lambda 表达式的性能优化有哪些技巧?C++ lambda 表达式的性能优化有哪些技巧?Apr 17, 2024 pm 05:45 PM

优化C++Lambda表达式的性能技巧包括:避免创建不必要的lambda对象通过std::bind显式捕获最小的对象使用std::move移动捕获的变量以避免复制优化lambda体,避免不必要的内存分配、重复计算和全局变量访问

C++ lambda 表达式如何与标准算法库配合使用?C++ lambda 表达式如何与标准算法库配合使用?Apr 17, 2024 pm 05:51 PM

C++Lambda表达式与标准算法库紧密协作,允许创建匿名函数,简化对数据的处理。具体用途包括:排序向量:使用lambda表达式对元素进行排序。查找元素:使用lambda表达式在容器中查找特定元素。

C++ 函数返回 Lambda 表达式时有什么限制?C++ 函数返回 Lambda 表达式时有什么限制?Apr 20, 2024 pm 12:42 PM

回答:C++函数可以返回Lambda表达式,但存在以下限制:限制:Lambda表达式应捕获存储类型(CapturesbyValue)Lambda表达式不能返回局部变量Lambda表达式不能返回Lambda表达式

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전