سؤال

وأنا حول اللعب قليلا مع أكشن. ما أريده هو أن أتمكن من عرض وظيفة رياضية من السلسلة.

ومنها مثلا. في بلدي النصي الثعبان العمل أفعل شيئا من هذا القبيل:

formula = 'x**2 + 3*x'
for x in range( 0, 100 ):
    y = eval( formula )
    graph.display( x, y )

وأريد أن الميناء هذا أكشن، ولكن يبدو أن هناك أي أكثر حدة التقييم منذ الإصدار 3. كيف يمكنني حساب القيم وظيفة لي على أية حال؟

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

المحلول

وشيء التي يمكن أن تعمل أيضا في قضيتك، وباستخدام جافا سكريبت حدة التقييم بدلا من ذلك. يمكنك استخدام شيء مثل:

وvar result = ExternalInterface.call(myEvalFunctionInJS,formula)

ولتقييم وظائف الرياضيات.

وهذا هو الحل سهل ومفيد نوعا ما جافا سكريبت هو قريب جدا من أكشن.

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

وتحرير: وهنا وصلة لذلك.

<وأ href = "http://www.actionscript.org/resources/articles/745/2/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page2.html" يختلط = "نوفولو noreferrer" > http://www.actionscript.org/resources/articles/745/2/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page2.html

نصائح أخرى

وسيكون لديك لكتابة eval نفسك. سيكون لديك لتحليل سلسلة واستدعاء المشغلين الصحيحة.

هنا "صلة سا للحصول على انك بدأته.

وهذا المشروع تامارين ديه ECMAScript محلل مكتوب في ES4. حاول هذا أيضا.

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

و"يمكنك حتى كتابة جافا سكريبت بأكمله داخل AS3، بحيث لا تحتاج للمس صفحة HTML الفعلية." هل لديك الروابط / الدروس؟ - okoman

وتستند كل AS وJS على نفس ECMAScript القياسية. لذا، إذا كنت تمرير سلسلة من AS3 إلى حاوية، واستخدام eval JS على هذه السلسلة، وينبغي أن تعمل على ما يرام.

لاحظت فقط هذه المسألة، وأدركت أنني أجبت تقريبا نفس الشيء بالضبط هنا: https://stackoverflow.com/a/11460839/ 1449525

لإعادة صياغة نفسي، يمكنك استخدام بالتأكيد D.eval و <لأ href = "http://eval.hurlant.com/" يختلط = "نوفولو noreferrer"> AS3Eval أو ExternalInterface (كما رأينا في الإجابة المختارة حاليا) على افتراض انك تقوم بتشغيل في صفحة ويب. ومع ذلك، كل ما يبدو ما تحتاجه حقا هو شيء من هذا القبيل MathParser ( مزيد من المعلومات حول MathParser )

وهنا هو كيف كنت تستخدم MathParser:

package {
    import bkde.as3.parsers.*;
    import flash.display.Sprite;
    public class MathTest extends Sprite {
        public function MathTest() {
            var parser:MathParser = new MathParser([]);
            var compiledObj:CompiledObject = parser.doCompile("(10/3)*4+10");
            var answer:Number = parser.doEval(compiledObj.PolishArray, []);

            var xyParser:MathParser = new MathParser(["x", "y"]);
            var xyCompiledObj:CompiledObject = xyParser.doCompile("(x/3)*y+10");
            var xyAnswer:Number = xyParser.doEval(xyCompiledObj.PolishArray, [10, 4]);
        }
    }
}

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

وA متأخرا بعض الشيء، ولكن لتكون مرجعا، المكتبة D.eval يفعل ما تسألون عن:

http://www.riaone.com/products/deval/

فهو حر ويعمل كبيرة بالنسبة لي، ولكن لا يأتي مع المصدر. لقد وجدت هذا السؤال تبحث عن بديل مدمج أو الحلول المتاحة المصدر.

وهناك أيضا مشروع تخلى على ما يبدو إلى ميناء تامارين إلى فلاش نفسها:

http://eval.hurlant.com/

وسيكون رهيبة إذا تم تحقيق مزيد من التقدم، ولكن يبدو وكأنه الفضول في الوقت الراهن.

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