동일한 유형의 매개 변수에 액세스하는 다른 방법을 가진 서로 다른 종류의 객체에 대한 데이터 구조체를 만들고 싶습니다. 예 :scheme/racket : extensible functions
circle 객체의 x-coord 앞에는 그룹 코드가 10 인 반면 line 객체에는 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
아니요, 그냥 반복을 줄이고 싶습니다 – KRC