واضح آرشیو وب فارسی:سایت ریسک: return شلغم نپخته 29 بهمن 1388, 22:11با سلام، یک تابع داریم که در اون تابع هم تابعی دیگه داره. در تابع دوم باید یک مقداری رو به برنامه اصلی برگردونم که نمیشه و مقدار به تابع اول برمیگرده! برای حل این مشکل باید چکار کنم؟ ممنون ++Hadi++ 29 بهمن 1388, 22:29سلام var A:Number=5; var B:Number=7; var C:Number; Fun01(); function Fun01():void { C=2*(Fun02(A,B))+3; trace(C);//OutPut:27 } function Fun02(a:Number,b:Number):Number { return a+b } شلغم نپخته 29 بهمن 1388, 22:43تشکر هادی خان منظور من یه چیز تو این مایه هاست: function qwe(){ function qwer(){ return("a"); } } حال من می خوام اون return از تابع اولی بیاد بیرون. ممنون ++Hadi++ 30 بهمن 1388, 09:41این کار یکم اشکال داره ولی اینم کد : var A:Number=5; var B:Number=9; var C:Number=0; Fun01();//OutPut:56 function Fun01():void { C=Fun02(A,B); trace(C); function Fun02(a:Number,b:Number):Number { return (a*b)+11; } } تا یه تابع رو صدا نزنی ، اون فعال نمی شه و اشکال سر این بود که شما اونو صدا نزده بودین . به اون قسمتی که تابع رو صدا می زنین می گن امضای تابع . کد بالا رو اینجوری هم می شه نوشت : var A:Number=5; var B:Number=9; var C:Number=0; Fun01();//OutPut:56 function Fun01():void { C=Fun02(A,B); trace(C); } function Fun02(a:Number,b:Number):Number { return (a*b)+11; } و فرق این دو تا در اینه که Fun02 در کد دوم ، سراسری هست و در کل جاها قابل دسترسی هست ولی در کد اول و فقط در داخل تابع Fun01 قابل دسارسی هست . یعنی : var A:Number=5; var B:Number=9; var C:Number=0; C=Fun02(A,B); trace(C);//OutPut:56 function Fun01():void { C=Fun02(A,B); trace(C); } function Fun02(a:Number,b:Number):Number { return (a*b)+11; } ولی در حالتی که خودت نوشتی اینطوری می شه : var A:Number=5; var B:Number=9; var C:Number=0; C=Fun02(A,B); trace(C);//OutPut:Error :1180: Call to a possibly undefined method Fun02. function Fun01():void { function Fun02(a:Number,b:Number):Number { return (a*b)+11; } } دیدی ، بهتره اونو سراسری تعریف کنی نه محلی ، اینو یه بار در مورد متغیر بهت گفته بودم . بای... شلغم نپخته 30 بهمن 1388, 10:08شکراً جزیل و اجراً عظیم هادی خان ببینید فرض کنید یه تابع به نام fun0 داریم حالا تو این تابع یه سری کارها انجام میشه که نیاز است یک فانکشن دیگه داخل اون تعریف کرد به نام fun1 مثل همون مثال خودم. حالا جوابی رو که fun1 ایجاد میکنه باید از fun0 خارج بشه، یعنی اینکه در کل وقتی میزنیم: fun0(1,4); باید جواب fun1 بیاد بیرون. آیا راهی برای انجام این کار هست؟ ممنون firestar9000 30 بهمن 1388, 13:33اگه منظورت رو درست فهميده باشم مي توني از نام گذاري هم استفاده كني. به مثال زير يه توجهي كن. var iNum = 0 ; outermost : for(var i=0;i<10;i++){ for(var j=0;j<10;j++){ if( i==5 && j==5 ){ break outermost; } iNum++ ; }راستي يادت باشه كه مخخف function بهتره كه func باشه شايدم بتوني اين طوري كني. function myFunc1(value1:Number):void{ function myFunc2(value2:Number):void{ // your code and command } return value1*value2 }; شلغم نپخته 30 بهمن 1388, 15:29ممنون اما این یک مثال خیلی واضحه: loadFile("start.txt"); function loadFile(a:String):String { var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(a); try { loader.load(request); } catch (error:Error) { trace("Unable to load requested document."); } loader.addEventListener(Event.COMPLETE, completeHandler); function completeHandler(event:Event) { var loader:URLLoader = URLLoader(event.target); return loader.data; } } برای این کد چه باید کرد؟ ++Hadi++ 30 بهمن 1388, 16:27return رو وقتی در یه تابع قرار می دی ، کارش اینه که یه چیزی رو بر گردونه . پس باید نوع خروجی تابع خودتو از نوع خروجی قرار بدی فرض کن قراره تابع زیر یه String رو بیرون پاس بده پس در تعریف اون می نویسی : trace(FunString());//OutPut:Hello function FunString():String { return "Hello"; } به عبارت String در تعریف اون نگاه کن ، باید نوع خروجی return شده ات با نوع اون در تعریف برابر باشه . وقتی تابعی قرار هست عبارت یا شی خاصی رو بیرون return کنه ، این تابع شبیه به یه متغیر پیشرفته عمل می کنه یعنی چی ؟ یعنی اینکه شی تابع شما مثل یه متغیر Convertor عمل می کنه که وقتی چیزایی رو بهش پاس می دین یا اگه چیزی رو واسه ورودی نیاز نداشته باشه ، اون چیزی که ازش خارج می شه در محاسبات قرار می گیره ، دو دستور زیر معادل همند : var A:Number=5; var B:Number=10; var C:Number=0; C=A+B; trace(C);//OutPut:15 دستور بالا با دستور پایین هم ارزه : var A:Number=5; var C:Number=0; function B():Number { return 10; } C=A+B(); trace(C);//OutPut:15 پس می بینی که در مورد توابع بازگرداننده مقادیر ، می شه گفت اونا نقش متغیر های پیشرفته رو عمل می کنند که می تونن روی یه سری عملیات خاص کار کنند و به صورت پیشرفته تر ، چیزی رو از خودشون خارج کنند و در محاسبات قرار بدن . این دستور درست هست : loadFile("start.txt"); function loadFile(a:String):void { var loader:URLLoader = new URLLoader(); var Request:URLRequest = new URLRequest(a); try { loader.load(Request); } catch (error:Error) { trace("Unable to load requested document."); } finally { loader.addEventListener(Event.COMPLETE, completeHandler); } } function completeHandler(event:Event):void { var Str:String =String(event.target.data); trace(Str); } از توابع بازگرداننده مقدار یا شی ، در جایی استفاده می شه که قرار هست یه سری عملیات خاص روی عده ای از متغیر ها و مقادیر انجام بگیره و خروجی خاصی از نوع خاص بیاد بیرون تا از اون خروجی در عملیات محاسباتی استفاده شه . بای.... شلغم نپخته 30 بهمن 1388, 16:41خسته نباشید و تشکر بابت مطالب ارزشمندتون ... خوب آقا هادی نمیشه کاری کرد که وقتی این تابع رو زدیم: trace(loadFile("start.txt")); محتویات start.txt نماش پیدا کنه؟ چه راهی رو برای کار ما پیشنهاد میکنید؟ ممنون ++Hadi++ 30 بهمن 1388, 17:18سلام چون نیاز هست از یه تابع برای Complete شدن به یه تابع دیگه بریم ، پس یه جورایی بی نتیجه به نظر می رسه ، من این کار رو کردم : trace(loadFile("start.txt")); function loadFile(a:String):String { var loader:URLLoader = new URLLoader(); var Request:URLRequest = new URLRequest(a); var Text:String; loader.load(Request); loader.addEventListener(Event.COMPLETE, completeHandler); loader.addEventListener(IOErrorEvent.IO_ERROR, err); function completeHandler(event:Event):void { Text=String(event.target.data); } function err(event:Event):void { Text="Unable to load requested document."; } return Text; } و جواب null بود ، حتی واسه setTimeout هم نیاز هست به تابع دیگه ای بریم و چون پای رویداد و تابع دیگه وسط هست ، پس همه اینها در یک پالس زمانی اجرا اتفاق نمی افتند و از نظر من این بی نتیجه هست و شاید راهی باشه دوست عزیز ولی اون به ذهن من نرسید . بای...
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 540]