আমি ব্যাপ্ত কাজ করছি Grails Clojure প্লাগইন মধ্যে Grails 2.0.0 (এবং 2.1.0-স্ন্যাপশট) এবং আমি এটি আপডেট করতে চেয়েছিলেন Clojure 1.3.0 যোগ clojure.tools.logging ।
Clojure একটি এর সংকলন করার সময় একটি ব্যতিক্রম ছোঁড়ার
প্রক্সি একটি এর ByteArrayOutputStream
মধ্যে clojure.tools.logging
এর লগ-স্ট্রীম ফাংশন:
ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn
( https://gist.github.com/a6ae681c37091a3d2379 )
আমি গিয়েছিলাম এবং সরানো clojure.tools.logging
এবং একটি ডাউন ছিনতাই লিখেছিলেন প্রক্সি এর Object
:
(proxy [java.lang.Object] [] (toString [] "proxy's toString"))
এবং এটি একই ClassCastException
এবং বার্তা ছুড়ে ফেলেছে ।
আমি প্রিন্ট করতে চেষ্টা macroexpand -1 এর প্রক্সি এবং একই জিনিস পেয়েছি।
আমি Clojure ১.২.০ এ ফিরে এসেছি এবং প্রক্সি আবার কাজ করেছে।
আমি ১.৪.০ এর অনেকগুলি অবতারের চেষ্টা করেছি এবং তারা ১.৩.০ এর মতো আচরণ দেখায়। 1.2.1 এছাড়াও কিছু ব্যতিক্রম ছোঁড়ে কিন্তু আমি 1.3.0 হিট করার চেষ্টা করছি তাই আমি এর সাথে খুব বেশি সময় ব্যয় করিনি।
'জনক-পদ্ধতি ফাংশন পয়েন্ট স্ট্যাক ট্রেস এক সংজ্ঞায়িত যাক ফরম generate-proxy
মধ্যে core_proxy.clj
।
আমি println
কী ঘটছে তা ধরতে পারি কিনা তা দেখতে আমি সেখানে চারপাশে একটি ছোট্ট ছদ্মবেশ যুক্ত করেছি। সম্ভবত এই পরবর্তী বিবৃতিটি আমার পক্ষ থেকে পাঠকের একটি বিশাল ভুল বোঝাবুঝির সাথে বিশ্বাসঘাতকতা করবে তবে কেবল সেইগুলি println
সংকলন সময়ের আচরণটি এমনভাবে পরিবর্তন করেছে যা আমি প্রত্যাশা করি না। ব্যতিক্রম অবস্থান এবং ব্যতিক্রমের ধরণটি পুরোপুরি পরিবর্তিত হয়েছে, যদিও ক্লোজুরের সমস্ত পরীক্ষা mvn package
পাস হতে থাকে।
উদাহরণস্বরূপ, println
জেন-পদ্ধতিতে কেবলমাত্র একটি একক যুক্ত করা বাইটকোড তৈরি করা শুরু করার আগে ক্লোজারকে ফেলে দেয়
ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class
( https://gist.github.com/5a7a40929a6c4a104bd5 )
আমি কোথায় রেখেছি তার উপর নির্ভর করে আমি অন্যান্য বিভিন্ন ত্রুটি দেখেছি println
তবে এটি সর্বাধিক প্রচলিত।
স্পষ্টতই গ্রিলস এবং ক্লোজারের কিছু দিক সঠিকভাবে জাল হচ্ছে না তবে আমি সংযোগটি দেখছি না। প্রথমে আমি এএসএমের অসম্পূর্ণতা নিয়ে সন্দেহ করি কিন্তু ক্লোজিউরের যেহেতু নিজস্ব এএসএম নেমস্পেস রয়েছে তাই আমি বিষয়টি দেখতে পাচ্ছি না। কিন্তু হয়তো আমি ভুল, আমি এ অনিমেষনেত্রে করে থাকেন আছি clojure.lang.Compiler
, প্রক্সি এবং উৎপন্ন-প্রক্সি দিনের জন্য এখন কাজ করার জন্য এই পেতে চেষ্টা এবং আমি প্রায় কাছাকাছি এগিয়ে উপার্জন অগ্রগতি কারণ আমি বাষ্প ফুরিয়ে থাকেন বন্ধ করেছেন :(
লিঙ্কের অভাবে আমি ক্ষমা চাইছি। আপনি নীচে থেকে অনুলিপি এবং পেস্ট করতে পারেন:
গ্রেলে ক্লোজার - github.com/grails-plugins/grails-clojure
ক্লোজার সরঞ্জাম লগিং - github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj লাইন 133 'প্রক্সি