我正在研究一个项目,我已经有了一些工作程序,但是我遇到了其中一个的初始化变量。
(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-de-flujo%)由一组节点,一组边和两个分离的节点定义。
我的问题是:有没有办法将继承字段放在init-fields之上?写red-de-flujo%
的方式(使用继承)迫使我先发送init-fields,最后发送inherited-fields。我希望能够做到这样的事情:(make-object red-de-flujo% N A nf nd)
而不会失去继承。
我已经尝试更改代码中的语句顺序,但它是一样的。
谢谢!
答案 0 :(得分:2)
我认为您不能更改make-object
的继承初始化参数顺序,但您可以通过仅使用命名初始化参数(通过new
或instantiate
)来解决此问题得到你想要的任何订单:
(new red-de-flujo% [N N0] [A A0] [nf nf0] [nd nd0])
其中N0
,A0
等只是我为您要传入的实际值而设置的占位符。
(注意:我原本在这里有更长的解释,但我认为这是错误的,所以我删除了它)