Google의 "C # lambda ref"에 대한 최상위 결과 중 하나입니다. 위의 답변을 확장해야한다고 생각합니다. 오래된 (C # 2.0) 익명 대리자 구문이 작동하며 더 복잡한 서명 (닫기)을 지원합니다. Lambda 및 익명 대의원은 최소한 컴파일러 백엔드에서 동일하게 인식 된 구현을 공유했으며 가장 중요하게는 클로저를 지원합니다.
검색을 수행하면서 구문을 보여주기 위해 시도한 작업 :
public static ScanOperation<TToken> CreateScanOperation(
PrattTokenDefinition<TNode, TToken, TParser, TSelf> tokenDefinition)
{
var oldScanOperation = tokenDefinition.ScanOperation; // Closures still work.
return delegate(string text, ref int position, ref PositionInformation currentPosition)
{
var token = oldScanOperation(text, ref position, ref currentPosition);
if (token == null)
return null;
if (tokenDefinition.LeftDenotation != null)
token._led = tokenDefinition.LeftDenotation(token);
if (tokenDefinition.NullDenotation != null)
token._nud = tokenDefinition.NullDenotation(token);
token.Identifier = tokenDefinition.Identifier;
token.LeftBindingPower = tokenDefinition.LeftBindingPower;
token.OnInitialize();
return token;
};
}
Lambdas는 절차 적으로 수학적으로 안전합니다 (앞서 언급 한 참조 값 승격 때문에). 웜 캔을 열 수 있습니다. 이 구문을 사용할 때는 신중하게 생각하십시오.