واضح آرشیو وب فارسی:سایت ریسک: t=18785">eval() چه جوري كار ميكنه naeim_crack 26 شهريور 1383, 10:25سلام اقا اين دستور eval(); كارش چيه و چه جوري كار مي كنه يك سوال ديگه هم داشتم من يك متغيير به شكل زير دارم pat="book" و هميشه اين متغيير pat عوض ميشه حالا من مي خوام مقدار متغيير رو توي يك مسير قرار بدم به شكل زير _root.*(var pat).text="naeim" مي خوام به جاي*(var pat) مقدار pat كه همون book هستش قرار بگيره مثل زير بشه يعني _root.book.text="naeim" مرسي fafa^mx 26 شهريور 1383, 10:50eval() برای تبدیل یک String به Object استفاده میشه! مصلا ما Object به نام "ali" نداریم!اما میتونیم آبجکتی به نام ali داشته باشیم!بنا بر این eval("ali") ==> ali naeim_crack 26 شهريور 1383, 13:48سلام در رابطه با eval بيشتر توضيح بدخ ببنيم كه به چه درد مي خوره قسمت دوم سوال كه خيلي مهمه هنوز مونده منتظرم idw 26 شهريور 1383, 14:20همونطوري كه بهت گفتم به نظرم براي سوال دومت بايد از object.porotoType يا يك همچين چيزايي بايد كار كنيد.حالا بايد پيداش كنيد توي رفرنس فلش :lol: عجب راهنمايي خفني. phoenix 27 شهريور 1383, 12:48من سعي مي كنم جواب هر 2 سوال را يكجا بدم: بعضي از زبانهاي برنامه نويسي اجازه تعريف كردن متغير به صورت dynamic را مي دهند بدين معني كه نام و مقدار متغير در runtime مشخص مي شود همچنين نام متغير مي تواند خود متغير باشد و يا در تتيجه يك فرايند منطقي بدست آيد. فلش يكي از اين زبانهاست. از زمان فلش 4 دو دستور eval و set براي ايجاد و بازخواني متغير ها وجود دارند. براي مثال براي ايجاد 10 متغير به نامهاي a 0 تا a 9 با مقدار هاي 0 تا 9 مي توان از set استفاده كرد: for(var i=0; i<10; i++) { set("a" + i, i); } همچنين براي بازخواني متغيرهاي بالا مي توان از eval استفاده كرد: for(var i=0; i<10; i++) { trace(eval("a" + i)); } eval وظيفه تبديل يك String را به Identifier و دستور set وظيفه نسبت دهي يك مقدار به يك متغير و ايجاد Identifer را به عهده دارند، Identifer در فلش هر آن چيزي است كه مقداري را در خود نگهداري مي كند مانند اسامي كلاسها، MovieClip ها، Object ها و يا متغير هاي ساده. اين دو دستور هر دو دستورهاي قديمي هستند شايد در يكي دو نسخه آيده فلش اين دستورات deprecate شوند. من تقريبا در هيچ جا استفاده اي براي اين دو دستور نمي بينم. از زمان فلش 5 امكان localize كردن data بر روي object ها با استفاده از Dot Notation و همچنين Bracket Notation وجود دارد بنابراين مي توان از اين روش به جاي استفاده از eval و set استفاده كرد: هنگامي كه يك متغير معلوم را در root_ تعريف مي كنيم مي توانيم از Dot Notation براي ايجاد و بازخواني استفاده كنيم: _root.variable = 1; trace(_root.variable); ولي وقتي بخواهيم يك متغير ديناميك تعريف كنيم Bracket Notation استفاده ميكنيم: _root["variable"] = 1; trace(_root["variable"]); اين شيوه كارامد تر و از نظر OO كاملتر از eval و set مي باشد بنابراين مثال بالا با اين روش به صورت زير در مي آيد: for(var i=0; i<10; i++) { this["a" + i] = i; } for(var i=0; i<10; i++) { trace(this["a" + i]); } استفاده هاي زيادي از Bracket Notation در فلش ميشود مثلا مي توان كليه property هاي يك Object را مرور كرد: obj = {val1:1, val2:2, val3:3, val4:4}; for(var i in obj) trace(i + ": " + obj[i]); و يا يك نكته بسيار جالب اينكه با استفاده از اين روش مي توان متغير هايي يا نام هاي غير مجاز ايجاد كرد: this["123"] = new Object(); this["123"]["@yahoo.com"] = new Object("[email protected]"); trace(this["123"]["@yahoo.com"]); در صورتي كه هرگز نميتوان اين متغيرها را به صورت Dot Notation استفاده كرد: trace([email protected]); // error naeim_crack 27 شهريور 1383, 16:35سلام phoenix دستت درد نكنه بابت اين توضيح كامل آقا يك مشگل پيش مياد اگه من بخوام به شكل زير عمل كنم اينو ببين tpath="_root.book.nima" [tpath].text="naeim"; ولي اين دستور اشتباه هستش و فلش اينو ايراد ميگره وحتما بايد به شكل زير باشه _root[tpath].text="naeim"; اين درسته ولي ديگه متغيير رو نمي خوني اما وقتي از eval استفاده كنيم فكر كنم بشه اما مشگل سر اين دستور هستش كه بعضي وقتها جواب رو درست ميده اما بعضي وقتي ميزنه سرش و ديگه كار نميكنه :lol: tpath="_root.book.nima" ttpath=eval(tpath); ttpath.text="naeim"; اگه دستور بالا كار كنه ديگه مشكلي پيش نمياد ولي كار نميكنه :cry: اين فايل رو يك بار درستش كردم كار ميكنه اما وقتي همون اكشن رو يه جاي ديگه ميبرم eval از كار ميوفته مرسي phoenix 27 شهريور 1383, 21:57در صورتي كه از absolute path استفاده كنيد و رشته اي كه با آن كار مي كنيد absolute path يك متغير باشد فقط با eval مي توان كار كرد: مثلا جايي از برنامه شما به صورت زير است: oo=targetPath(_parent); ll=oo+"."+dname; kk=eval(ll); trace("dname path ===> "+kk); اين كاملا درسته با كمي خلاصه سازي ميشه به اين صورت نوشتش: trace("dname path ===> " + eval(_parent+"."+dname)); اما هميشه مي توان از relative path و Bracket Notation استفاده كرد: trace("dname path ===> "+_parent[dname]); naeim_crack 27 شهريور 1383, 23:55سلام اقا دستت درد نكنه مشگلم حل شد خيلي جالب توضيح ميدي مرسي
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 4300]