سؤال
أنا أحاول أن أفهم الجملة من أجل الدعوة الاستخدام لتحميل المكتبة:
(use 'clojure.contrib.duck-streams)
من المنطقي بالنسبة لي كما ينطبق الاقتباس القارئ الماكرو clojure.contrib.بطة-تيارات حتى أن القارئ لا تحاول تقييم هذه السلسلة.
الآن, إذا كنت ترغب في استخدام :العلامة فقط إلى تحميل فقط القارئ لماذا هذا هو الصحيح:
(use '[clojure.contrib.duck-streams :only (reader)])
بدلا من:
(use '[clojure.contrib.duck-streams :only reader])
قرأت هذا يعني تمر في هذا ناقل من الحجج لاستخدام لكن REPL يشكو مع لا أعرف كيفية إنشاء ISeq من الرمز.لماذا parens حول القارئ ؟
وهذا هو أيضا ما يعادل السطر الأول و صالحة:
(use '[clojure.contrib.duck-streams])
لذلك يبدو أن 'السلسلة هي '[سلسلة] تعادل الحجج التي لا تفهم.
المحلول
:only
يريد قائمة الرموز.هكذا وظيفة هو مكتوب.ملاحظة docstring على refer
, ، use
الاستخدامات.
refers to all public vars of ns, subject to filters.
filters can include at most one each of:
:exclude list-of-symbols
:only list-of-symbols
:rename map-of-fromsymbol-tosymbol
إنه مكتوب في هذه الطريقة بحيث يمكنك تحديد أكثر من رمز واحد إذا كنت تريد.
(use '[clojure.contrib.duck-streams :only (reader writer)])
كما نوقش في هذه المشاركة الأخيرة, إذا كنت تكتب دالة التي تأخذ أو بإرجاع متغير عدد من الحجج ، انها فكرة جيدة أن يكون ذلك دائما تأخذ/عودة قائمة أو ناقل أو مجموعة ، حتى لو كان أخذ/إرجاع عنصر واحد.لأن:
nil
, غالبا ما تستخدم لتمثيل "صفر البنود" ،seq
قادرة على.فارغة مجموعات أيضاseq
قادرة على.- اثنين أو أكثر من العناصر الموجودة في القائمة
seq
قادرة على. - إلا أنه من المنطقي أن يكون أيضا عنصر واحد يكون
seq
تستطيع من خلال وضعه في القائمة نفسها.
سيكون محرجا أن يكون واحد البند الحالة تكون حالة خاصة.انها أكثر اتساقا و أسهل برنامج حول عندما كنت تعامل واحد البند كنوع من تتدهور الحالة و رميها في قائمة.
علما بأن جميع use
يهتم هو ما إذا كان :only
الحجة هي seqable مجموعة من الرموز.هذا يعني أن القوائم ناقلات مجموعات كل عمل.
(use '[clojure.contrib.duck-streams :only [reader writer]])
(use '[clojure.contrib.duck-streams :only #{reader writer}])
واحد Symbol
ومع ذلك لا seq
على الذي هو السبب في أنك تحصل على استثناء تفعل.
نظرة في الأساسية.clj إذا كنت تريد أن ترى كيف تنفذ.
نصائح أخرى
وهذه ليست مجرد "أقواس" - أقواس هي بناء الجملة من أجل إنشاء قائمة. ويبدو هذا البند بعد: من المتوقع أن تكون قائمة من الأشياء التي ينطبق على العلامة الوحيدة