در زبان روبی یک کلاس بنویسید که با گرفتن یک آرایه از نمادها در زمان اجرا به کمک 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 ساخته و از بلاک برای گرفتن پارامتر مقدار استفاده کنید.

توسط پژوهشگر در 202 روز قبل ساعت 02:31
دسته بندی ها: Ruby Ruby for beginner
sara در 202 روز قبل ساعت 09:21

برای ایجاد متدهای خواندن و نوشتن به طور پویا با استفاده از define_method برای هر نماد، این رویکرد کارآمد است. اما در حلقه ممکن است متغیر attr به صورت late-binding در بلاک‌ها باقی بماند و همه متدها به مقدار آخرین نماد ارجاع دهند. بهتر است یک متغیر محلی مانند name = attr تعریف کرده و از name در بلاک‌ها استفاده کنید تا هر متد مقدار مربوط به همان نماد را بدهد. استفاده از instance_variable_get/instance_variable_set با "@#{name}" ساده و واضح است. اگر تعداد نمادها زیاد است، می‌توانید با استفاده از ساختارهای مناسب مانند Struct یا سایر روش‌های داینامیک‌سازی به تکرار کمتری برسید.

گزارش

1 پاسخ

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

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