लैम्ब्डा अभिव्यक्तियों का एक लाभ यह है कि आपको केवल एक परिणाम का मूल्यांकन करना होगा जब आपको इसके परिणाम की आवश्यकता हो।सी # लैम्ब्डा अभिव्यक्ति और आलसी मूल्यांकन
निम्नलिखित (सरल) उदाहरण में, पाठ समारोह केवल मूल्यांकन किया जाता है जब एक लेखक मौजूद है:
public static void PrintLine(Func<string> text, TextWriter writer)
{
if (writer != null)
{
writer.WriteLine(text());
}
}
दुर्भाग्य से, इस कोड का उपयोग कर एक छोटा सा बदसूरत बना देता है। आप की तरह
PrintLine("Some text", Console.Out);
एक निरंतर या चर से कॉल करने और इसे इस तरह फोन करने की जरूरत नहीं कर सकते हैं:
PrintLine(() => "Some text", Console.Out);
संकलक पारित कर दिया स्थिर से एक parameterless समारोह "का अनुमान लगा" करने में सक्षम नहीं है। क्या सी # के भविष्य के संस्करणों में इसे सुधारने की कोई योजना है या क्या मुझे कुछ याद आ रहा है?
अद्यतन:
मैं सिर्फ पाया एक गंदा अपने आप को हैक:
public class F<T>
{
private readonly T value;
private readonly Func<T> func;
public F(T value) { this.value = value; }
public F(Func<T> func) {this.func = func; }
public static implicit operator F<T>(T value)
{
return new F<T>(value);
}
public static implicit operator F<T>(Func<T> func)
{
return new F<T>(func);
}
public T Eval()
{
return this.func != null ? this.func() : this.value;
}
}
अब मैं बस के रूप में समारोह को परिभाषित कर सकते हैं:
public static void PrintLine(F<string> text, TextWriter writer)
{
if (writer != null)
{
writer.WriteLine(text.Eval());
}
}
और यह दोनों एक समारोह या एक साथ फोन मूल्य।
मैं सहमत हूं। एक अधिभार जोड़ने के मामले में, अंतर को बताना असंभव होगा [यदि ऐसा शॉर्टकट समर्थित था]। – Krisc