مشكلات نطاق تهيئة الكائن المعقدة مع الوظائف المتداخلة

StackOverflow https://stackoverflow.com/questions/1586744

سؤال

حسنًا ، أحاول استخدام فصول S4 لإنشاء كائن معقد للغاية ، مع فتحات تشمل نصف دزينة من المصفوفات ، وبعض القوائم ، وربما حوض المطبخ أو اثنين هناك. تتم تهيئة الكائن عن طريق الإشارة إلى وتفريغ كائن التكوين الذي حددته بالفعل. من السهل بما يكفي لتحديد الفصل باستخدام setClass () ، لكنني أواجه صعوبة في اكتشاف طريقة أنيقة لوضع فتحات في setMethod ("تهيئة").

المشكلة هي أنني بحاجة إلى تعيين عناصر معينة من تلك المصفوفات نصف دزينة بناءً على أجزاء من كائن التكوين هذا. لكل عنصر من عناصر كائن التكوين ، قد أضطر إلى تعيين عناصر محددة من العديد من المصفوفات. لاحظ أن المصفوفات في نطاق/بيئة وظيفة التهيئة. بعد ذلك ، لدي وظائف متداخلة ضمن وظيفة التهيئة التي تقوم بالتعيين الفعلي للمصفوفات ، أو هذه هي الفكرة على أي حال. يمكن لهذه الوظائف بالطبع يرى المصفوفات ، لكنهم لا يستطيعون ذلك تعديل لأنهم لأن المشغل ينشئ مصفوفة جديدة إذا لم يتم تعريف المتغير الأصلي في البيئة الحالية. R هو التمرير بالقيمة ، ويعني ذلك. هذا صحيح حتى بالنسبة لفتحات .Object التي أحاول تهيئتها. لذلك لا يمكنني استخدام الوظائف المتداخلة للقيام بالتهيئة.

لسوء الحظ ، يتعين على هذه الوظائف المتداخلة تعديل العديد من المصفوفات ، لذا فإن القيم الإرجاع والقيام بالتعيين في وظيفة التهيئة الرئيسية ليست عملية أو أنيقة. (ولكن هذا ممكن ، إذا قمت بنسخ من المصفوفات في قوائم يتم إرجاعها ثم جمعتها في وظيفة التهيئة الرئيسية. قبيح ، وسوف تتطلب الكثير من التعليمات البرمجية الإضافية.)

والتكرار (الذي من شأنه أن يمنع قضية النطاق) ليس عمليًا للغاية سواء بسبب الطبيعة الهرمية لكائن التكوين ، الذي يريد حقًا اجتيازه بالمكالمات العودية.

الخيار الأخير الذي يمكنني التفكير فيه هو استخدام وظيفة التعيين () مع خيار ENVIR لإجبار المهمة على التقديم على المتغير غير المحلي. ولكن يبدو أن استخدام بيئات كهذه يبدو icky ، مثل بيان GOTO ...

إذن ، ما هو أكثر النهج القرصري؟ التمسك مع البرمجة الوظيفية النقية وبناء هياكل البيانات القبيحة فقط لتمرير المصفوفات الزائدة عن الحاجة؟ حاول العثور على حل تكراري يتجنب الوظائف تمامًا؟ هل تستخدم السحر العميق من خلال اللعب مع البيئات؟

هل كانت مفيدة؟

المحلول

هل نظرت إلى <<- ؟ يجعل التعيين في البيئة الأصل أسهل قليلاً.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top