تابعی در روبی بنویسید که با دریافت یک نام کلاس (رشته) و یک هش از نامویژگیها، بهصورت داینامیک یک کلاس جدید با 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 برای ارزیابی بلوک در حوزه کلاس بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
ایجاد کلاس داینامیک با metaprogramming در روبی قدرتمند است، اما باید با نامگذاری و بررسی وجود کلاس پیش از ثبت کنار بیایید. قبل از ثبت به عنوان کانستانت با Object.const_set از const_defined? استفاده کنید تا از بازنویسی ناخواسته جلوگیری شود و نام را به قالب CamelCase نگه دارید. برای اضافه کردن ویژگیها از attr_accessor یا define_method استفاده کنید و initialize را طوری بسازید که مقادیر ورودی به ویژگیها نسبت داده شوند. اگر رفتار مشترکی هم میخواهید، میتوانید Module.new بسازید و با include به کلاس تازهساز اضافه کنید تا کد تکراری کاهش یابد.
گزارش