سؤال

لقد بحثت على الويب عن كيفية تطبيقها srictfp في سكالا ولكن لم يستطع العثور على أي تلميح منه. هناك بعض الأشخاص الذين يشكون من ذلك ، ولكن لا يمكن العثور على حلول حقيقية. هناك إدخال Bugtracker حول هذا الموضوع ما يقرب من عامين. كما يبدو أنه لا يوجد حل أنيق له على الطريق الذي أبحث عنه عن الحلول.

فكرتي الحالية هي تعيين علامة طريقة Appropiate ACC_STRICT في رمز Bytecode الذي تم إنشاؤه بنفسي بطريقة أو بأخرى ، لكن ليس لدي أي فكرة عما سيكون أفضل حل للقيام بذلك. يتبادر إلى الذهن المكون الإضافي لبرنامج التحويل البرمجي Scala أو مجرد اختراق أعلام في محرر Hex. ربما واجه شخص ما نفس التحدي ويمكن أن يخبرني حله؟

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

المحلول

يمكنك إضافة مرحلة ما بعد المعالج في عملية البناء الخاصة بك من شأنها إضافة strictfp المعدل للفئة التي تم إنشاؤها (أي تعيين ACC_STRICT العلم كما تقول).

يمكنك تنفيذ مثل هذا المعالج باستخدام جافاسيست فمثلا. هذا يمكن أن يبدو هكذا:

CtClass clazz = ClassPool.getDefault().makeClass(
                    new FileInputStream("old/HelloWorld.class"));

CtMethod method = clazz.getDeclaredMethod("testMethod");

method.setModifiers(method.getModifiers() | Modifier.STRICT);

clazz.detach();
clazz.toBytecode(new DataOutputStream(new FileOutputStream(
    "new/HelloWorld.class")));

يجب عليك بعد ذلك إيجاد طريقة لتكوين الفئات/الطريقة التي يجب تعديلها بهذه الطريقة.

نصائح أخرى

سكالا لديها strictfp التعليق التوضيحي الآن:

@strictfp
def f() = …
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top