کلاسی به نام Config بنویسید که با استفاده از method_missing بتواند خواص دلخواه را در یک هش داخلی مدیریت کند طوری که بتوان مقادیر را با روش assignment (مثلاً config.database = 'db') ست کرد، آنها را خواند (مثلاً config.database) و با پرسشهای ؟ (مثلاً config.debug?) وجود یا مقدار بولی آنها را بررسی کرد.
3.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:52 0.0
برای حل این مسئله یک هش داخلی (مثلاً @data = {}) نگه دارید و متد method_missing را بازنویسی کنید: اگر نام متد با "=" تمام میشود مقدار را در هش قرار دهید، اگر با "?" تمام میشود وجود/مقدار بولی را برگردانید و در غیر این صورت مقدار مربوطه را بازگردانید یا nil. همچنین respond_to_missing? را بازنویسی کنید تا بازتاب (reflection) صحیح کار کند و برای متدهای نامربوط به super مراجعه کنید. نکتهها: نام متد را با to_s پردازش کنید، حتماً assignment حداقل یک آرگومان بپذیرد و برای خوانایی تستهایی مثل config.some_key = 1; config.some_key; config.some_key? را امتحان کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای پیادهسازی کلاس Config با استفاده از method_missing، نام متد را با to_s پردازش کنید و پایان آن را به '=' یا '?' تشخیص دهید تا رفتار مناسب پیادهسازی شود. وقتی نام با '=' پایان مییابد، حداقل یک آرگومان بپذیرید و مقدار را در @data ذخیره کنید؛ وقتی با '?' پایان مییابد، وجود کلید و مقدار بولی آن را بازگردانید و در غیر این صورت مقدار کلید را یا nil برگردانید. همچنین respond_to_missing? را بازنویسی کنید تا بازتاب (reflection) صحیح باشد و برای متدهای نامربوط به super ارجاع داده شود. برای حفظ خوانایی و پایداری، از تستهایی مانند config.some_key = 1؛ config.some_key؛ config.some_key؟ استفاده کنید و به مسائلی مانند thread-safety و همارزی کلیدها فکر کنید.
گزارش