在创建对象时运行命令

时间:2017-03-09 03:13:08

标签: class scheme racket

我有一个简单类(堆栈)的代码:

#lang racket

(define stackClass%
  (class object% 
    (super-new)
    (init-field (mystack '(A B C)))      

    (define/public (push n)
      (set! mystack (cons n mystack)))

    (define/public (pop) 
      (cond [(empty? mystack)   #f]
            [else  (define res (car mystack))
                   (set! mystack (rest mystack))
                   res] ))

    (define/public (show)
      mystack)

    mystack   ; I want to output mystack at time of creation of class object; not working here; 

    )); end class; 


; USAGE:
(define sc (new stackClass%))
(send sc push 1)
(send sc push 2)
(send sc show) 
(send sc pop)
(send sc show)

输出:

'(2 1 A B C)
2
'(1 A B C)

我想在创建类对象时输出mystack。但是,虽然没有显示错误,但它在此代码中不起作用。

使用以下代替(init-field (mystack '(A B C)))也无济于事:

(init (L '(A B C)))
(define mystack L)

如何在创建课程时运行一段代码?

1 个答案:

答案 0 :(得分:0)

是的,您的代码运行正常。此外,正在评估“mystack”。但是,它不会产生任何输出。如果要显示某些内容,可以使用多种功能之一。尝试在代码中将mystack替换为(println mystack)