سؤال

مرحبًا ومساء الخير ، أتمنى أن يساعد شخص ما.

أحاول الحصول على نوع من الدعم البرمجي. لدي الرمز التالي ، الذي ينفذ طريقة روبي ويعيد النتيجة. ومع ذلك ، فإنه يعيد "طريقة لم يتم العثور على خطأ" من 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top