سؤال

وانا ذاهب العودة إلى الأساسيات هنا ولكن في لوا، يمكنك تحديد الجدول كما يلي:

myTable = {}
myTable [1] = 12

والطباعة الإشارة الجدول نفسه يعيد مؤشر إلى ذلك. للوصول إلى عناصرها تحتاج إلى تحديد فهرس (أي بالضبط كأنك مجموعة)

print(myTable )    --prints pointer
print(myTable[1])  --prints 12

والآن وظائف هي قصة مختلفة. يمكنك تحديد وطباعة وظيفة مثل ذلك:

myFunc = function() local x = 14 end     --Defined function
print(myFunc)                            --Printed pointer to function

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

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

المحلول

وليس هناك من سبيل للوصول إلى الجسم شفرة المصدر ظيفة معينة في سهل لوا. يتم طرح شفرة المصدر بعيدا بعد التجميع إلى رمز بايت.

ملحوظة BTW يمكن تعريف هذه الوظيفة في وقت التشغيل مع مرفق مثل loadstring.

والحلول الجزئية ممكنة - اعتمادا على ما تريد فعلا تحقيق

.

ويمكنك الحصول على موقف شفرة المصدر من مكتبة التصحيح - إذا تم تمكين مكتبة التصحيح ولا يتم تجريد رموز التصحيح من بايت كود. بعد أن كنت قد تحميل الفعلي الملف المصدر واستخراج رمز من هناك.

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

إذا كنت في حاجة الى حل لتحليل قانون لوا، نلقي نظرة على Metalua .

نصائح أخرى

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

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

لوا الاستقراء المرافق في المكتبة التصحيح.

<اقتباس فقرة>   

وظيفة الاستقراء الرئيسية في   مكتبة التصحيح هي debug.getinfo   وظيفة. في أول معلمة قد يكون   وظيفة أو مستوى المكدس. عندما انت   استدعاء debug.getinfo (فو) لبعض   وظيفة فو، وتحصل على الجدول مع   بعض البيانات عن تلك الوظيفة. ال   قد يكون الجدول المجالات التالية:

وحقل ترغب فيه هو ظائفها على ما أعتقد.

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

env = {}
myFunc = function() x = 14 end
setfenv(myFunc, env)
myFunc()
print(myFunc)    -- prints pointer
print(env.x)     -- prints 14

وبدلا من ذلك، هل يمكن الاستفادة من تصحيح مكتبة :

> myFunc = function() local x = 14 ; debug.debug() end
> myFunc()
> lua_debug> _, x = debug.getlocal(3, 1)
> lua_debug> print(x) -- prints 14

وربما يكون أكثر فائدة لك لاسترداد المتغيرات المحلية مع <لأ href = "http://www.lua.org/manual/5.1/manual.html#pdf-debug.sethook" يختلط = " نوفولو noreferrer "> وظيفة هوك بدلا من إدخال صراحة وضع التصحيح (أي إضافة نداء debug.debug ())

وهناك أيضا تصحيح واجهة في API لوا C .

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