0
A
回答
1
我猜你的意思是寫「功能EXPR,返回[接受的] OBJ [和]返回方案表達式,評估的時候,...」
假如是這樣的話:你真正需要的是設計配方。首先:寫下你的函數接受的例子,以及它返回的內容。這將澄清你正在嘗試做的事情,無論是對他人還是(可能更重要的)對你自己。
希望這是有幫助的;遺憾的是如此不透明......
1
如果你希望你的程序能夠複製任何對象,則目標可能是計劃的basic types.中的任何一個憑藉爲不同的類型,它們具有不同的「性質, 「或結構,或者你有什麼,因此製作一種類型的對象的副本必然涉及製作不同類型的另一個對象的副本的不同策略。
所以,你如何處理,這是檢查每個計劃的類型(或者說,你關心處理方案的類型的子集),並砌出意味着什麼,複製該類型的對象。如果你這樣做的明顯的方式,你應該結束了一組像拷貝數,複製符號等專門的程序(擾流板:很多這些程序都不會是很有趣的。)
的團結,這些專門的程序到一個單一的一個可以複製你把它降低到確定對象真實的類型和呼喚複製FOO程序做的工作(你還可擴展過程在線)任何對象。你可以用COND和類型確定謂詞真正輕鬆地組織這樣的:「對類型調度」
(define (copy-object obj)
(cond ((number? obj) (copy-number obj))
((boolean? obj) (copy-boolean obj))
...
))
這是對數據進行操作,無論其類型稱爲通用設計模式這實際上是一種非常糟糕的方式來進行泛型編程,而不是在這種情況下太重要。
的最後一件事就是返回你可以評估,以獲得副本的事情的增加皺紋。不妨告訴你那是什麼直線上升:封裝調用拷貝對象的無參數的lambda表達式中:
(define (expr-returning obj)
(lambda() (copy-object obj)))
然後,你可以做的東西一樣
guile> (define x (list 1 2 3 4)) guile> (define y (expr-returning x)) guile> (define cx (y)) guile> x (1 2 3 4) guile> cx (1 2 3 4) guile> (set-cdr! x 'foo) guile> x (1 . foo) guile> z (1 2 3 4) etc.
相關問題
- 1. Swift:返回對象的副本
- 2. Java:返回對象的副本
- 3. 如何在不創建副本的情況下返回對象?
- 4. 返回一個與原始相同的對象的副本
- 5. 如何在基類的向量中返回派生對象的副本?
- 6. 重載=運算符時返回對象的深層副本
- 7. 在班級方法中創建並返回對象的副本
- 8. NHibernate查詢返回目標對象的多個副本
- 9. Restlet修改入站對象並返回它或返回新的副本?
- 10. Convert.ChangeType()是否創建對象的副本或返回原始對象的引用?
- 11. 如何製作Cython對象的副本?
- 12. 如何製作JavaScript對象的副本?
- 13. 如何創建對象的副本?
- 14. 如何製作對象的副本
- 15. 如何返回本地對象
- 16. PowerShell將收集對象作爲副本返回
- 17. 階副本對象
- 18. Objective-C返回Autoreleased副本
- 19. 創建對象的副本
- 20. 獲取對象的副本
- 21. 如何返回對象
- 22. 如何返回子對象?
- 23. 如何shared_ptr的從內返回當前對象的「本」對象本身
- 24. 爲什麼Django的查詢索引操作符返回對象的副本
- 25. 修改對象或返回修改副本的函數的Python命名約定
- 26. C++對象的地圖本地副本
- 27. 對象池似乎要返回一個對象副本而不是對象引用
- 28. 如何讓nodejs爲郵遞員返回名副其實的json對象?
- 29. 返回不返回對象
- 30. SQL選擇不同的返回副本
什麼樣的對象你的意思是? – 2011-02-24 10:41:36
爲什麼不只是返回obj?我假定你正在計劃進行破壞性修改。爲什麼不創建一個返回修改副本的函數,然後用續行來包裝它,以便爲您提供所需的行爲? – Marcin 2011-02-24 19:09:39