Racket中的类中的默认/可选参数?

时间:2013-10-06 03:27:23

标签: arguments scheme default racket

我希望我的程序在用户不键入时在参数中设置默认值。 到目前为止我的代码:

    (define nodo%
     (class object%
     (init INFO)
     (init HIJOS)
     (init VISITADO?)
     (define info INFO)
     (define hijos HIJOS) 
     (define visitado? VISITADO?)
     (super-new)))

争辩说我不想违约是VISITADO? (访问西班牙语)

1 个答案:

答案 0 :(得分:4)

init允许使用此类默认参数:

#lang racket
(define nodo%
     (class object%
     (init INFO)
     (init HIJOS)
     (init [VISITADO? #f])
     (define info INFO)
     (define hijos HIJOS) 
     (define visitado? VISITADO?)
     (define/public (get-visitado?)
       visitado?)
     (super-new)))

(define n1 (new nodo% [INFO 'a] [HIJOS 'b]))
(send n1 get-visitado?) ; #f
(define n2 (new nodo% [INFO 'a] [HIJOS 'b] [VISITADO? #t]))
(send n2 get-visitado?) ; #t

顺便说一句,您也可以使用init-field来处理它:

#lang racket
(define nodo%
  (class object%
    (init-field info
                hijos
                [visitado? #f])
    (super-new)))

(define n1 (new nodo% [info 'a] [hijos 'b]))
(get-field visitado? n1) ; #f
(define n2 (new nodo% [info 'a] [hijos 'b] [visitado? #t]))
(get-field visitado? n2) ; #t

请参阅the documentation