我正在做一个项目,我已经有了一些工作过程,但是我在其中一个项目的初始化变量上遇到了问题。
(define red-de-flujo%
(class grafo%
(init-field nodof nodod)
(inherit-field N A)
(super-make-object)
(let ([Ninfo (map (λ (n) (send n get-info)) N)])
(cond
((or (not (in? (send nodof get-info) Ninfo)) (not (in? (send nodod get-info) Ninfo))) (error "nodos fuera de N"))
(else (void))
)
)
(inherit get-nodos get-aristas)
(define/public (get-nodo-fuente) nodof)
(define/public (get-nodo-destino) nodod)
)
)这段代码可以工作,但是我使用另一种方法来实现make-object的red-de-flujo%类型。这是一段代码:
(define/public
(crear-red-de-flujo N A nf nd)
(make-object red-de-flujo% nf nd N A ) <<-- not as in definition
)问题是,流网络(red- defined %)是由一组节点、一组边缘和两个分离的节点定义的。
我的问题是:是否有办法将继承的字段置于init字段之上?编写red-de-flujo%的方式(使用继承)迫使我先发送init字段,然后再发送继承字段。我希望能够做到这样的事情:(make-object red-de-flujo% N A nf nd)而不失去继承。
我已经尝试过更改代码中语句的顺序,但这是一样的。
谢谢!
发布于 2014-12-09 06:14:52
我不认为您可以更改make-object的继承初始化参数顺序,但是您可以通过使用命名初始化参数(通过new或instantiate)来获得您想要的任何顺序来解决这个问题:
(new red-de-flujo% [N N0] [A A0] [nf nf0] [nd nd0])其中,N0、A0等只是我为要传入的实际值放置的占位符。
(注:我最初在这里有一个较长的解释,但我认为这是错误的,所以我删除了)
https://stackoverflow.com/questions/27370656
复制相似问题