در زبان روبی یک کلاس بنویسید که با گرفتن یک آرایه از نمادها در زمان اجرا به کمک define_method برای هر نماد متد خواندن و نوشتن ایجاد کند.
6.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:31 0.0
برای حل این مسئله در روبی از متد define_method استفاده کنید: برای هر نماد دو متد بسازید — یکی که با instance_variable_get مقدار متغیر نمونه "@اسم" را برمیگرداند و دیگری که با instance_variable_set مقدار را تنظیم میکند. معمولاً کدی شبیه attributes.each do |attr|; define_method(attr) { instance_variable_get("@#{attr}") }; define_method("#{attr}=") { |v| instance_variable_set("@#{attr}", v) }; end کافی است. توجه کنید که نام متغیر نمونه را با interpolation ساخته و از بلاک برای گرفتن پارامتر مقدار استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای ایجاد متدهای خواندن و نوشتن به طور پویا با استفاده از define_method برای هر نماد، این رویکرد کارآمد است. اما در حلقه ممکن است متغیر attr به صورت late-binding در بلاکها باقی بماند و همه متدها به مقدار آخرین نماد ارجاع دهند. بهتر است یک متغیر محلی مانند name = attr تعریف کرده و از name در بلاکها استفاده کنید تا هر متد مقدار مربوط به همان نماد را بدهد. استفاده از instance_variable_get/instance_variable_set با "@#{name}" ساده و واضح است. اگر تعداد نمادها زیاد است، میتوانید با استفاده از ساختارهای مناسب مانند Struct یا سایر روشهای داینامیکسازی به تکرار کمتری برسید.
گزارش