回答
這是不正確的,你正在檢查對象x是否實現IDeref接口,這只是意味着你可以用@符號取消引用對象。你想要的是這樣的:
(instance? clojure.lang.Ref x)
編輯:
(調整徵求意見)。
您可以按照您的建議進行操作,但這樣做的缺點是將其他用戶所做的擴展IDeref的對象分類爲引用類型。還要考慮到變量也具有引用類型的作用,但不使用IDeref接口。
這裏有兩個很好的選擇。你可以寫一個使用或語句的函數:
(def ref? [x]
(or (instance? clojure.lang.Ref x)
(instance? clojure.lang.Agent x)
...))
或者你可以使用協議來定義一個新的謂詞。這具有可擴展的優點。
(defprotocol Ireference? (reference? [this]))
(extend-type java.lang.Object Ireference? (reference? [this] false))
(extend-type nil Ireference (reference? [this] false))
(extend-type clojure.lang.Ref Ireference? (reference? [this] true))
(extend-type clojure.lang.Agent Ireference? (reference? [this] true))
;;user=> (reference? nil)
;;false
;;user=> (reference? (ref 0))
;;true
我還會更進一步,使它成爲一個新的謂詞,如'(defn ref?[x](instance?clojure.lang.Ref x))' – skuro
bmillare:我實際上詢問所有「引用」,而不僅僅是「ref 「和afaik,術語」參考「包括參考,原子和代理。 –
還要注意的是,你不能用這樣的類文字用例:'(case(class「hi」)String true false) - > false' –
- 1. 測試,如果事情是到別的參考
- 2. 我如何測試某個詞是否與黃瓜有關聯?
- 3. 如何在bash中「嘗試做某件事,然後檢測它是否失敗」?
- 4. 如何測試我們是否在Gradle中構建版本
- 5. 爲什麼當我們測試片段是否可見時,我們測試片段是否不爲空?
- 6. 如何確定VSLangProj.Reference是否是項目參考或文件參考?
- 7. 如何測試某個屬性中是否存在某個XML
- 8. 如何檢測單元測試是否調用某個方法?
- 9. 是否respond_to代碼做任何事情對我們在測試模式
- 10. 如何檢測參數是否發送事件
- 11. XPath 2.0:如何測試我們在變量中是否是一個元素?
- 12. 我該如何測試我的gstreamer插件?是否有用於gstreamer插件測試的標準測試套件?
- 13. 如何檢測字符串是否等於某事?
- 14. 是否有Android XML參考?
- 15. 如何檢測事件是否爲瀏覽器事件
- 16. 如何測試某人的cookies是否無效? (PHP)
- 17. 檢測拉姆達是否是這樣的方法參考
- 18. 事件參考
- 19. 如何測試我的安裝程序是否包含文件?
- 20. ASP.NET MVC路由測試是否考慮過單元測試或集成測試?
- 21. 如何查看我是否參考了ViewModel?
- 22. 測試是否有一個參數
- 23. Python:測試參數是否爲整數
- 24. 是否有可用於測試我們的OAuth 1.0a簽名的測試站點?
- 25. QTP是否有任何事件處理程序或測試引擎事件?
- 26. 我如何正確測試Laravel事件?
- 27. Windows BAT:測試某個特定文件是否爲空
- 28. 如何測試某個類的實例是否是特定的泛型類型?
- 29. (Selenium)如何測試某個文件的下載是否已啓動?
- 30. Playstore如何檢測我們的應用是否包含廣告?
有一個開放JIRA添加斷言這和其他內置類型:http://dev.clojure.org/jira/browse/CLJ-1298 – dskrvk