At Wed, 1 Dec 2010 20:52:47 +0000, Stephen De Gabrielle wrote: > I'm getting an error when I try to use 'apply' on an inherited method: > > colourwell.rkt:60:47: class: misuse of method (not in application) in: set > > I feel I've missed something in my reading of the reference manual for apply > or inheriting methods, but I don't know where I've gone wrong?
Methods are not values, so a method name cannot be used in an arbitrary expression position. (We could have a method name expand to a `lambda' wrapper for a method call, but we decided not to do that, since it would be an especially hidden allocation of a closure.) To apply a method name to a list of arguments, there's a special syntax. It's not a good syntax, but it's a workable one. Use a dot in the method-application form before an expression that produces a list of argument: (let ([args (hsv->rgb hue saturation value)]) (set-rgb . args)) In this example, I had to lift the `hsv->rgb' call to a local binding, since (set-rgb . (hsv->rgb hue saturation value)) is the same as (set-rgb hsv->rgb hue saturation value) which isn't what you want --- and that's why the method-apply syntax is not a good choice. _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users