我希望爲不同類型的對象創建一個數據結構,這些對象具有不同的訪問相同類型參數的方法。例如,方案/球拍:可擴展功能
一個圓形對象的x-coord前面的組代碼爲10,而一個線條對象的x-coord前面的標題爲30.此外,對象並不總是具有相同的參數
所以泛型函數提取所有必要的參數從任何物體看起來像:
(define (build-struct lst)
(if (empty? lst)
empty
(begin (make-entity (find-params (string=? (car (car lst)))))
(build-struct (cdr lst)))))
;function to build structs from a list of lists (that contain an object)
(define-struct entity (name x-coord y-coord layer-name [num-vertices #:auto] [radius #:auto] [start-angle #:auto] [end-angle #:auto])
#:auto-value empty)
;data struct to store object param values
(define (find-circle-param lst parameter)
(let ((kw (string-upcase parameter)))
(if (empty? lst)
'() ;put error message here
(cond ((and (string=? kw "X-COORD") (= (car lst) "10"))
(cadr lst))
((and (string=? kw "Y-COORD") (= (car lst) "20"))
(cadr lst))
((and (string=? kw "LAYER-NAME") (= (car lst) "8"))
(cadr lst))
((and (string=? kw "RADIUS") (= (car lst) "40"))
(cadr lst))
(else #f)))))
(define (find-line-param lst parameter)
(let ((kw (string-upcase parameter)))
(if (empty? lst)
'() ;put error message here
(cond ((and (string=? kw "X-COORD-START") (= (car lst) "10"))
(cadr lst))
((and (string=? kw "Y-COORD-START") (= (car lst) "20"))
(cadr lst))
((and (string=? kw "X-COORD-END") (= (car lst) "11"))
(cadr lst))
((and (string=? kw "Y-COORD-END") (= (car lst) "21"))
(cadr lst))
((and (string=? kw "LAYER-NAME") (= (car lst) "8"))
(cadr lst))
(else #f)))))
;functions to find parameter value depending on object type
我只是想尋找參數來創建一個功能。
我錯過了一些上下文。你正在實現你自己的對象系統嗎? – soegaard 2014-12-08 11:26:05
不,我只是想減少重複 – KRC 2014-12-08 12:43:58