تالار گفتمان مانشت
Dynamic Scoping چیست؟؟؟ - نسخه‌ی قابل چاپ

Dynamic Scoping چیست؟؟؟ - mostafa2012 - 26 دى ۱۳۹۳ ۰۹:۴۱ ق.ظ

سلام
ببخشید من static Binding یا همون static Scoping که سوال گفته رو میدونم (مثل توضیحات خودش) {درست گفتم که static bidingآیا مساویstatic scoping هس؟؟}

حال سوال من اینجاست که :»
Dynamic دیگه چطوریه؟؟
باتشکر


[تصویر:  327140_k0gxwxx253i2duz11q5y.png]

RE: Dynamic Scoping چیست؟؟؟ - bluebaran - 26 دى ۱۳۹۳ ۱۱:۴۳ ق.ظ

(۲۶ دى ۱۳۹۳ ۰۹:۴۱ ق.ظ)mostafa2012 نوشته شده توسط:  سلام
ببخشید من static Binding یا همون static Scoping که سوال گفته رو میدونم (مثل توضیحات خودش) {درست گفتم که static bidingآیا مساویstatic scoping هس؟؟}

حال سوال من اینجاست که :»
Dynamic دیگه چطوریه؟؟
باتشکر


[تصویر:  327140_k0gxwxx253i2duz11q5y.png]

ما دو تا حوزه دستیابی داریم
۱- ایستا
۲- پویا
در حوزه پویا وقتی ارجاع غیر محلی داریم برای اینکه مقدار متغیرو بفهمیم چیه باید رد فراخوانی رو دنبال کنیم مثلا ما تو این سوال
تو تابع f1
داریم n=n+m
n که پارامتر رسمی f1
هستش و میشه متغیر محلی برای f1
در اینجا مقدارش ۳ هست
حالا m تو تابع f1
غیر محلی هستش باید ببینیم کجا این تابع فراخوانی شده داخل main
پس main میشه والدش و اونجا میگردیم ببینیم که آیا اعلانی برای متغیر m
پیدا میکنیم یا نه اگه بود که هیچی اگه نبود میگردیم ببینیم کی والد رو فراخوانی کرده و همین طور تا آخر
اینجا اعلان m رو پیدا میکنیم و مقدار m میشه ۳
پس شد n=3+3, n=6
و مقدارو برمیگردونه m داخل main میشه ۶
حالا تو main تابع f2
اجرا شده
داخل f2 داریم
n=n*m
n که محلی هستش میشه ۳
و m که غیر محلی هستش و می گردیم ببینیم کی فراخوانیش کرده main اونجا m= 6 هستش
n=n*m
۳*۶=n
حالا بر میگردیم
(m=m*f(3
که (f(3
شد ۱۸ و m که محلی هستش و مقدارش ۶ هست پس نتیجه میشه ۲۴
ایستا که گفتی بلدی

RE: Dynamic Scoping چیست؟؟؟ - mostafa2012 - 26 دى ۱۳۹۳ ۰۳:۲۴ ب.ظ

(۲۶ دى ۱۳۹۳ ۱۱:۴۳ ق.ظ)bluebaran نوشته شده توسط:  
(26 دى ۱۳۹۳ ۰۹:۴۱ ق.ظ)mostafa2012 نوشته شده توسط:  سلام
ببخشید من static Binding یا همون static Scoping که سوال گفته رو میدونم (مثل توضیحات خودش) {درست گفتم که static bidingآیا مساویstatic scoping هس؟؟}

حال سوال من اینجاست که :»
Dynamic دیگه چطوریه؟؟
باتشکر


[تصویر:  327140_k0gxwxx253i2duz11q5y.png]

ما دو تا حوزه دستیابی داریم
۱- ایستا
۲- پویا
در حوزه پویا وقتی ارجاع غیر محلی داریم برای اینکه مقدار متغیرو بفهمیم چیه باید رد فراخوانی رو دنبال کنیم مثلا ما تو این سوال
تو تابع f1
داریم n=n+m
n که پارامتر رسمی f1
هستش و میشه متغیر محلی برای f1
در اینجا مقدارش ۳ هست
حالا m تو تابع f1
غیر محلی هستش باید ببینیم کجا این تابع فراخوانی شده داخل main
پس main میشه والدش و اونجا میگردیم ببینیم که آیا اعلانی برای متغیر m
پیدا میکنیم یا نه اگه بود که هیچی اگه نبود میگردیم ببینیم کی والد رو فراخوانی کرده و همین طور تا آخر
اینجا اعلان m رو پیدا میکنیم و مقدار m میشه ۳
پس شد n=3+3, n=6
و مقدارو برمیگردونه m داخل main میشه ۶
حالا تو main تابع f2
اجرا شده
داخل f2 داریم
n=n*m
n که محلی هستش میشه ۳
و m که غیر محلی هستش و می گردیم ببینیم کی فراخوانیش کرده main اونجا m= 6 هستش
n=n*m
۳*۶=n
حالا بر میگردیم
(m=m*f(3
که (f(3
شد ۱۸ و m که محلی هستش و مقدارش ۶ هست پس نتیجه میشه ۲۴
ایستا که گفتی بلدی

سلام
واقعا از توضیحاتتون ممنون ......

کافی و کامل توضیح دادین....

موفق وموید!
التماس دعا..