BTW: you could have different constructors too. def self.quick_new(x,y,width,height,styles=nil) self.new(x,y,width,height,0,0,styles) end On Tuesday 19 October 2004 07:04 pm, Tim Hunter wrote: | Looking for coding style advice... | | I'm trying to write a method that describes a rectangle. A rectangle is | defined by the x,y coordinates of its upper-left corner and its width and | height. These values are required. Optionally, the rectangle can have | "styles," like the fill color and the stroke color. Also optionally, the | rectangle can have rounded corners, if you specify how much rounding you | want in the x and y directions. (The default is square corners.) | | The method I started with is: | | def rect(x, y, width, height, rx=0, ry=0, styles=nil) | # blah, blah, blah | end | | Where the styles argument (if present) is a Hash formed by the usual | trailing key=>value pairs. All very standard Ruby. | | I was thinking that you'd create a square-corner rectangle like this: | | canvas.rect(10, 10, 20, 30, :fill=>'black', :stroke='red') | | But of course that doesn't work, because the styles hash | "{:fill=>'black', :stroke=>'red'}" gets assigned to rx, not to styles. | | Of course, within rect I could test the class of rx and/or ry and if it's a | Hash, assign it to styles, but that seems kludgy and insufficiently | Rubyish. I could divide rect into two methods, rect and rounded_rect, but | that means that the user has to remember an extra method name. I could make | rx and ry required arguments. Blech. | | Thoughts? -- ( o _ елеще┴ // trans. / \ transami / runbox.com I don't give a damn for a man that can only spell a word one way. -Mark Twain