سؤال

أنا أحاول أن أفهم الجملة من أجل الدعوة الاستخدام لتحميل المكتبة:

(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 إذا كنت تريد أن ترى كيف تنفذ.

نصائح أخرى

وهذه ليست مجرد "أقواس" - أقواس هي بناء الجملة من أجل إنشاء قائمة. ويبدو هذا البند بعد: من المتوقع أن تكون قائمة من الأشياء التي ينطبق على العلامة الوحيدة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top