"طريقة غير معروفة" باستخدام IronRuby في C#
سؤال
مرحبًا ومساء الخير ، أتمنى أن يساعد شخص ما.
أحاول الحصول على نوع من الدعم البرمجي. لدي الرمز التالي ، الذي ينفذ طريقة روبي ويعيد النتيجة. ومع ذلك ، فإنه يعيد "طريقة لم يتم العثور على خطأ" من IronRuby نفسها.
var engine = IronRuby.Ruby.CreateEngine();
returnvalue = engine.Operations.InvokeMember(instance, method, arg).ToString();
أقوم بتشغيل رمز الياقوت التالي كاختبار:
class Plotlight
def get_message(a)
res = "Hello- from Ruby " << a
res
end
def swapcase(a)
res = a.downcase
res
end
end
الآن ، عند تشغيل الطريقة get_message("something")
, ، الأمور تعمل بشكل رائع. ومع ذلك ، عند تشغيل شيء لديه إشارة إلى المكتبة القياسية (Swapcase في هذا المثال) ، سيعود الخطأ
$exception {"undefined method `downcase' for fooBAR:ClrString"} System.Exception {System.MissingMethodException}
تشغيل الرمز من خلال ir.exe
يعمل دون أي مشاكل.
هل أحتاج إلى الإشارة إلى المكتبة ، وإذا فعلت ، كيف أفعل ذلك؟
آمل أن بعض واحدة يمكن أن تساعد! شكرا جزيلا لك.
أطيب التحيات،
ماركو
المحلول
تتميز سلاسل الياقوت بالدلالات التي لا تتوافق مع سلاسل CLR. على وجه الخصوص ، إنها قابلة للتغيير. لم يكتمل interop بين سلاسل Ruby وسلاسل CLR بعد ، لذا ستحتاج الآن إلى إلقاء نظام CLR بشكل صريح.
أبسط الحلول هو تحديد مقايضة مثل هذا:
def swapcase(a)
String.new(a).downcase
end