سؤال

أقوم بتصميم API (في Java) ونتوقع أن يكون لديك مستخدمين يصل إلى API من MATLAB. المشكلة هي أنني أريد أن توفر API قطعة من الوظائف مثل:

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);

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

javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
    public boolean evaluate(JavaObj jo) {
        return "READY".equals(jo.getState());
    }
});

انت وجدت الفكرة.

كيف يمكن استدعاء هذا من داخل ماتلاب؟ هل يمكنني استخدام فصول داخلية مجهولة من ماتلاب؟ هل يمكنني إعلان matlab classdef الذي يمتد الواجهة Predicate (هل يمكن هذا التعامل مع إصدار Java Generic)؟

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

المحلول

هذا يبدو وكأنه سؤال صعب. ما زلت أقلي تشغيل R2006B لذلك قد تغير هذا، لكن يبدو أن Matlab لن يترجم مقابض الوظيفة (بما في ذلك الوظائف المجهولة) والهياكل في كائنات Java. لا أعرف عن فصول ماتلاب مخصصة، حيث تغير بناء الجملة. السلاسل، المصفوفات، ومصفوفات الخلية سوف يترجم بشكل صحيح. وبعد إنهم لا يعلقون على الإطلاق عند تنفيذ واجهات. (: p: p: p boo hiss)

تحرير: وجدت فقط هذه الصفحة matlab central., ، يتحدث عن بعض واجهات غير موثقة.

نصائح أخرى

Matlab لديه حل أجمل بكثير من إجبار المستخدمين على إنشاء فئة كاملة فقط لتوفير طريقة واحدة. ألق نظرة على وظائف مجهولة.

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

تعديل: أفترض أنك ستقوم بالاقتراع من Matlab، وليس اجتياز وظيفة المسند إلى Java. مثال:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top