הרצת מתודות בצורה דינאמית חלק שני

בחלק הקודם, דיברתי על הרצת מתודות בשפת פסקל מונחת עצמים. בחלק הזה אדבר על הרצת מתודות בשפת רובי.

לרובי יש שלוש צורות שאני מכיר, על מנת להריץ מתודות בצורה דינאמית. הדרך הראשונה היא שימוש ב eval.
eval מאפשרת להריץ תוכן של מחרוזת המועברת למתודה. המחרוזת היא קוד רובי.

s = 'Hello World'
eval "puts s"

התוכן שיודפס הוא "Hello World", היות והמשתנה s הוגדר כבר למערכת.

הדרך השניה שיש ברובי, היא דרך להכניס מתודות למשתנה, ולהריץ אותן בזמן "אחר":

myproc = method(:puts)
myproc.call 'Hello World'

math = 1.method('+')
puts math.call(1) #prints 2

מה שקורה הוא, שֵהמתודה method מחזירה מחלקה בשם Method עם המתודה שרוצים להריץ, וקריאה ל call, מריצה אותה. כאשר יש צורך בפרמטרים, אז מעבירים ל call את הפרמטרים עצמם.

הדרך האחרונה  להריץ מתודה בצורה דינאמית, היא על ידי שימוש במתודה send:

puts String.send('to_s') # prints 'String'
puts 'Hello World'.send('[]', 1) # prints 'H'

תכנות דינאמי נעים :)

רשומה זו פורסמה בקטגוריה Ruby, טכנולוגיה, פיתוח, קוד פתוח, תוכנה, תכנות, עם התגים . אפשר להגיע ישירות לרשומה זו עם קישור ישיר.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s