عملگر lambda لامبدا => در سیشارپ یونیتی
پنجشنبه, ۲۲ مهر ۱۳۹۵، ۰۲:۴۱ ق.ظ
gameover.blog.ir
=> Operator (C# Reference)
یکی از دوستان سوال پرسیده بود که چرا در کد زیر از => استفاده شده؟
تشخیص کلیک و نگه داشتن دکمه در یونیتی:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Move : MonoBehaviour {
public InputField inputFiled1;
public Text label1;
public Button btn1;
void Start ()
{
//btn1.onClick.AddListener(()
btn1.OnPointerDown.AddListener(()=>{
......
});
}
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Move : MonoBehaviour {
public InputField inputFiled1;
public Text label1;
public Button btn1;
void Start ()
{
//btn1.onClick.AddListener(()
btn1.OnPointerDown.AddListener(()=>{
......
});
}
پاسخ:
این اسمش هست علمگر لامبدا
تقریبا مثل همون مساوی هست
ولی برای زمانی که نمی خوایم یک تابع دیگه تعریف کنیم
میایم از این استفاده می کنیم
یک تابع بی اسم ساختیم
و خروجی رو برگشت می دیم همونجا
https://msdn.microsoft.com/en-us/library/bb311046.aspx
جاوا اسکریپت کار کردید؟
توی صفحات وب
یادته ؟
<body onload="checkCookies()">
مثلا با کد بالا وقتی سایت لود میشه تابع checkCookies اجرا میشه.
مثال دیگه بدو اسم تابع و اجرای کد همونجا:
<body onload="function(){alert('hello');}">
تابعی که گذاشتیم اجرا میشه
خوب؟
تو رویداد onload
اینجا حالا رویداد کلیک رو تو یونیتی داریم ،یه جور دیگه:
btn1.OnPointerDown.AddListener(
()=>{
......
}
);
()=>{
......
}
);
در حقیقت،کد بالا می گه وقتی رویداد OnPointerDown روی دکمه btn1 رخ داد بیا و کدی که تو ناحیه قرمز نوشتیم اجرا کن.
در نگارش متدهای بینام، کلمه کلیدی delegate اختیاری است؛ به این علت که خود کامپایلر می بیند که شما درحال انتساب متد به delegate هستید مثال : دو کد زیر تقریبا معادل هستن:
MyDel del = delegate(int x) { return x + 1; } ; // Anonymous method
MyDel le1 = (int x) => { return x + 1; } ; // Lambda expression
مثال از نوع دیگه:
(string w) => w.Length
۹۵/۰۷/۲۲