1

Racket ガイド 13.7.3 Parameterized Mixins を読みました

パラメータ化された Mixin を使用してクラスを作成しgood-eat-fish%ますfish%

(define fish-interface
  (interface () eat get-size))

(define fish%
  (class* object% (fish-interface)
    (init size)
    (super-new)
    (define current-size size)
    (define/public (get-size) current-size)
    (define/public (eat other)
      (set! current-size (+ current-size (send other get-size))))))

(define (good-eat-mixin member-name)
  (define eat member-name)
  (mixin () ()
    (inherit eat)
    (define/public (good-eat y)
      (eat y) (eat y))))

(define good-eat-fish%
  ((good-eat-mixin (member-name-key eat)) fish%))

コードを実行すると、次のエラーが発生します。

"mixin: method was referenced in definition, but is not in any of the from-interfaces
  method name: eat
  from-interfaces:"

このエラー メッセージは、eatメソッドがないことを示していますか?

コードを次のように変更すると

(define (good-eat-mixin member-name)
  (define eat member-name)
  (mixin (interface () eat) (interface () eat good-eat)
    (inherit eat)
    (define/public (good-eat y)
      (eat y) (eat y))))

次のエラーが表示されます。

interface: bad syntax in: interface

残念ながら理由はわかりません

interface () eat) 

構文が悪いです。

4

1 に答える 1