واضح آرشیو وب فارسی:سایت ریسک: ارسال متغیر به تابع با مرجع یا Reference در اکشن 3 ++Hadi++ 25 اسفند 1389, 10:44سلام ما در C++ می تونستیم یه متغیر رو به دو صورت به یه تابع بفرستیم : 1- با مقدار 2- با مرجع یا رفرنس در حالت اول وقتی متغیر داخل تابع می رفت و اونو به روش زیر تغییر می دادیم ، هیچ تغییری در اصل متغیر ایجاد نمی شد : int a=1; ChangeFun(a); cout<<a<<endl;//OutPut:1 void ChangeFun(int NewNumber) { NewNumber=10; } ولی وقتی همونو با این روش می فرستادیم ، در واقع اونو با مرجع و اصلش وارد تابع می شد و می تونستیم اونو کلا عوض کنیم : int a=1; ChangeFun(a); cout<<a<<endl;//OutPut:10 void ChangeFun( int$ NewNumber) { NewNumber=10; } در واقع در روش دوم ، آدرس اشاره گر یا در واقع خونه حافظه این متغیر در ورودی تابع کچی می شد و می تونستیم ، اونو از بیس عوض کنیم . البته یه استثنائی در مورد آرایه ها بود و این بود که اگه آرایه رو به روش اول ارسال می کردین ، می تونستین به صورت مستقیم مقادیر خونه های اونو عوض کنین و در واقع واسه تغییر مقدار خونه های آرایه نیازی به ارسال مرجع آرایه نیست .چرا؟ چون آرایه خودش یه اشاره گره . حالا همین روش در اکشن به سبک های متنوع امکانپذیره . من امروز دنبال این روش در اکشن 3 بودم و اونو پیدا کردم و گفتم براتون بنویسم . اول این دستور رو در فلش و اکشن 3 اجرا کنید : var i:int=1; ChangeFun(i); trace(i);//output:1 function ChangeFun(num:int):void { num=10; } خوب دیدین که متغیر عوض نشد چون اونو با مقدار فرستادیم .برای اینکه بتونیم یه متغیر رو با مرجع به تابع اکشن 3 بفرستیم تا اونو عوض کنین باید از آرایه یا از Object استفاده کنیم . به اینجا توجه کنید : var i:Array=[1,2,3,4,5]; ChangeFun(i); trace(i);//output:100,2,3,4,5 function ChangeFun(num:Array):void { num[0]=100; } می بینین که ر اینجا ، آرایه رو تونستیم مستقیما عوض کنیم . و حالا کار نهایی که خواستم بهتون آموزش بدم : var objVar:Object = {x:10, y:15}; objVar.z=20; trace("First Time : ",objVar.x, objVar.y,objVar.z); // 10 15 passByRef(objVar); // 11 16 trace("Final Trace: ",objVar.x, objVar.y,objVar.z); // 11 16 function passByRef(objParam:Object):void { objParam.x++; objParam.y++; objParam.z++; trace("In Function: ",objParam.x, objParam.y,objParam.z); } یعنی کافیه متغیراتونو رو یه Object تعریف و داخل تابع ببرین تا بتونین اونو به صورت مرجع عوض کنین ... موفق باشید ... armanbm 26 اسفند 1389, 00:50ممنون هادی جان. در تکمیل پست شما بگم. من به صورت تجری متوجه شدم تمام ساختمان داده ها و .. در اکشن اسکریپت به صورت اشاره گری به حافظه ی مربوطه هستند بجز ساختمان داده های اولیه مثل int , long, nomber , string,.... که مقدار خودشونه. البته من تو dictunary وhash table حضور ذهن ندارم اما بنظرم اونا هم به صورت اشاره گرن. اشاره گر به خونه ی حافه ای که اطلاعات مربوزه ذخیره شده. واین میتونه داده ی زائد تو حافظه ایجاد کنه... سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1137]