T
Tim Hunter
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?
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?