تابعی در روبی بنویسید که با دریافت یک نام کلاس (رشته) و یک هش از نام‌ویژگی‌ها، به‌صورت داینامیک یک کلاس جدید با attr_accessor برای هر ویژگی و یک متد initialize تولید کرده و کلاس را به‌عنوان یک کانستانت در فضای نام اصلی ثبت کند.

4.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:18

0.0

برای حل این مسئله از قابلیت‌های متاپرگرامنینگ روبی استفاده کنید: با Object.const_set یک کلاس جدید بسازید (Class.new) و درون آن با attr_accessor یا define_method برای هر کلید هش متدهای خواندن و نوشتن ایجاد کنید و متد initialize را طوری تعریف کنید که مقادیر ورودی را به ویژگی‌ها نسبت دهد. می‌توانید برای افزودن رفتار مشترک از Module.new و include استفاده کنید. نکات مفید: نام کلاس را قبل از ثبت بررسی کنید (const_defined?)، از نام‌های معتبر کانستانت استفاده کنید و از class_eval یا instance_eval برای ارزیابی بلوک در حوزه کلاس بهره ببرید.

توسط پژوهشگر در 201 روز قبل ساعت 03:18
دسته بندی ها: Ruby Ruby for beginner
nima در 201 روز قبل ساعت 06:52

ایجاد کلاس داینامیک با metaprogramming در روبی قدرتمند است، اما باید با نام‌گذاری و بررسی وجود کلاس پیش از ثبت کنار بیایید. قبل از ثبت به عنوان کانستانت با Object.const_set از const_defined? استفاده کنید تا از بازنویسی ناخواسته جلوگیری شود و نام را به قالب CamelCase نگه دارید. برای اضافه کردن ویژگی‌ها از attr_accessor یا define_method استفاده کنید و initialize را طوری بسازید که مقادیر ورودی به ویژگی‌ها نسبت داده شوند. اگر رفتار مشترکی هم می‌خواهید، می‌توانید Module.new بسازید و با include به کلاس تازه‌ساز اضافه کنید تا کد تکراری کاهش یابد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری