My word I'm looking at almost the same problem! I wish we had real named
parameters. But in the mean time try:
def rect(x, y, width, height)
# ...
yield(self)
# ...
end
rect(10,10,100,100){ |r| r.rx=0; r.ry=0; r.fill='red' }
At least I think that's how it's done. For even more "inner" control:
def rect(x, y, width, height, &yld)
# ...
instance_eval &yld
# ...
end
rect(10,10,100,100){ @rx=0; @ry=0; @fill='red' }
These aren't tested so sorry if I made any mistakes, but you get the idea at
least.
T.
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