সামনের সময়ের সাথে সংকলন করার সময় কি একাধিক উত্স ফাইলের উপর ক্লোজারের নেমস্পেসকে ভাগ করা সম্ভব :gen-class
? কীভাবে (:main true)
এবং (defn- ...)
খেলার মধ্যে আসা?
উত্তর:
অবশ্যই আপনি পারবেন, প্রকৃতপক্ষে clojure.core
নেমস্পেস নিজেই এইভাবে বিভক্ত হয়ে গেছে এবং একটি ভাল মডেল সরবরাহ করে যা আপনি এটি অনুসরণ করে অনুসরণ করতে পারেন src/clj/clojure
:
core.clj
core_deftype.clj
core_print.clj
core_proxy.clj
..etc..
এই সমস্ত ফাইল একক clojure.core
নেমস্পেস তৈরি করতে অংশ নেয় ।
এর মধ্যে একটি হ'ল প্রাথমিক ফাইল, নাম স্থানের নামের সাথে মিল রাখতে নামকরণ করা হয়েছে যাতে এটি যখন :use
বা এর মধ্যে উল্লেখ করা হয় তখন এটি পাওয়া যায় :require
। এই ক্ষেত্রে মূল ফাইলটি হয় clojure/core.clj
এবং এটি একটি ns
ফর্ম দিয়ে শুরু হয়। আপনার অন্য ফাইলগুলির যেগুলির প্রয়োজন হতে পারে তা বিবেচনা না করেই আপনার সমস্ত নামের স্থানটি কনফিগারেশন করা উচিত । এটি সাধারণত :gen-class
পাশাপাশি অন্তর্ভুক্ত করে , তাই এর মতো কিছু:
(ns my.lib.of.excellence
(:use [clojure.java.io :as io :only [reader]])
(:gen-class :main true))
তারপরে আপনার প্রাথমিক ফাইলের উপযুক্ত স্থানে (বেশিরভাগ সাধারণত সব শেষে) load
আপনার সহায়ক ফাইল আনতে ব্যবহার করুন । ইন clojure.core
এটা ভালো দেখায়:
(load "core_proxy")
(load "core_print")
(load "genclass")
(load "core_deftype")
(load "core/protocols")
(load "gvec")
নোট করুন যে আপনার বর্তমান ডিরেক্টরিটি উপসর্গ হিসাবে প্রয়োজন হবে না, আপনার .clj
প্রত্যয়ও লাগবে না ।
সাহায্যকারী ফাইলগুলির প্রত্যেকটি তাদের নাম-স্থানটি সাহায্য করছে তা ঘোষণা করে শুরু করা উচিত, তবে in-ns
ফাংশনটি ব্যবহার করে তা করা উচিত । সুতরাং উপরের উদাহরণস্বরূপ, সহায়ক ফাইলগুলি সমস্ত দিয়ে শুরু হবে:
(in-ns 'my.lib.of.excellence)
এটি সবই নেয়।
যেহেতু এই সমস্ত ফাইল একক নেমস্পেস তৈরি করছে, আপনার নির্ধারিত প্রতিটি ফাংশন প্রাথমিক বা সহায়ক ফাইলগুলির মধ্যে যে কোনও একটিতে হতে পারে। অবশ্যই এটির অর্থ হ'ল আপনি যে gen-class
কোনও ফাইলে আপনার ফাংশন সংজ্ঞায়িত করতে পারেন:
(defn -main [& args]
...)
নোট করুন যে ক্লজুরের সাধারণ ক্রম-সংজ্ঞা সংক্রান্ত নিয়মগুলি এখনও সমস্ত ফাংশনের জন্য প্রযোজ্য, সুতরাং আপনাকে নিশ্চিত করতে হবে যে কোনও ফাংশন সংজ্ঞায়িত ফাইল যে ফাংশনটি ব্যবহার করার চেষ্টা করার আগে লোড হয়েছে ।
আপনি সেই (defn- foo ...)
ফর্ম সম্পর্কেও জিজ্ঞাসা করেছিলেন যা একটি নেমস্পেস-ব্যক্তিগত ফাংশন সংজ্ঞায়িত করে। এইরূপে সংজ্ঞায়িত ফাংশনগুলির পাশাপাশি অন্যান্য :private
ভার্সগুলি নাম স্থানের মধ্যে যেখানে সেগুলি সংজ্ঞায়িত করা হয়েছে সেগুলি থেকে দৃশ্যমান হয়, তাই প্রাথমিক এবং সমস্ত সহায়ক ফাইলগুলি এখন পর্যন্ত লোড হওয়া যে কোনও ফাইলগুলিতে সংজ্ঞায়িত ব্যক্তিগত ওয়ারে অ্যাক্সেস পেতে পারে।