That was exactly my point. The initial Groovy example was not under
order rule if we want to support this feature.
.w( the_mindstorm )p.
> You can't mix them in Python, either. The order must be:
>
> - Normal parameters
> - Keyword arguments (or arguments with default value).
> - Argument lists
> - Maps
>
> In the code, this looks like so:
>
> def f(arg, argWithDefault='default value', *args, **kw):
> print 'arg=%s, argWithDefault=%s, *args=%s, **kw=%s' % (str(arg),
> str(argWithDefault), str(args), str(kw))
>
> Resolution:
>
> - The first parameter is stored in "arg"
> - If there is a second parameter, then the value is stored in
> "argWithDefault". If there isn't, "argWithDefault" has the value
> 'default value'. Note: The value is evaluated once. If you say, for
> example, x=[] to define a list, all invocations of f() will be passed
> the same list instance.
> - All other, unnamed arguments end up in *args which is a list
> - All named arguments end up in the map **kw.
>
> Examples:
>
> f() -> Error, because arg is missing
> f(1) -> arg=1, argWithDefault='default value', *args=[], **kw={}
> f(1,2) -> arg=1, argWithDefault=2, *args=[], **kw={}
> f(1,2,3) -> arg=1, argWithDefault=2, *args=[3], **kw={}
> f(1,2,3,4) -> arg=1, argWithDefault=2, *args=[3,4], **kw={}
> f(1,2,3,4, argWithDefault=5) -> Error: Value of argWithDefault is
> specified twice.
> f(1,argWithDefault=5,2,3,4) -> Error: non-keyword arg after keyword arg
> f(1,2,3,4,a=5) -> arg=1, argWithDefault=2, *args=(3, 4), **kw={'a': 5}
>
> > ./alex
> > --
> > .w( the_mindstorm )p.
> >
> >> On 10/9/07, Alex Tkachman <
alex.tkachman@...> wrote:
> >> > Do we want to code like this where constructor params mixed with named
> >> > properties?
> >> >
> >> > class Book {
> >> > Book (String author, String coauthor) {
> >> > this.author = author
> >> > this.coauthor = coauthor
> >> > }
> >> >
> >> > String title, author, coauthor
> >> > }
> >> >
> >> > class SuperBook extends Book {
> >> > SuperBook (Map map, String author, String coauthor) {
> >> > super (author, coauthor)
> >> > title = "SuperBook"
> >> > }
> >> > }
> >> >
> >> > class NewInstanceTest extends GroovyTestCase{
> >> > void testNewInstance () {
> >> > def book = Book.newInstance("Alex", title: "All about it",
> >> "Graeme" )
> >> > assertEquals book.title, "All about it"
> >> > assertEquals book.author, "Alex"
> >> > assertEquals book.coauthor, "Graeme"
> >> > }
> >> >
> >> > void testConstructor () {
> >> > def book = new Book("Alex", title: "All about it", "Graeme" )
> >> > assertEquals book.title, "All about it"
> >> > assertEquals book.author, "Alex"
> >> > assertEquals book.coauthor, "Graeme"
> >> > }
> >> >
> >> > void testSuper () {
> >> > def book = new SuperBook("Alex", title: "All about it", "Graeme" )
> >> > assertEquals book.title, "SuperBook"
> >> > assertEquals book.author, "Alex"
> >> > assertEquals book.coauthor, "Graeme"
> >> > }
> >> > }
> >> >
> >> > ---------------------------------------------------------------------
> >> > To unsubscribe from this list please visit:
> >> >
> >> >
http://xircles.codehaus.org/manage_email> >> >
> >> >
> >>
> >>
> >> --
> >> Guillaume Laforge
> >> Groovy Project Manager
> >>
http://glaforge.free.fr/blog/groovy> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe from this list please visit:
> >>
> >>
http://xircles.codehaus.org/manage_email> >>
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe from this list please visit:
> >
> >
http://xircles.codehaus.org/manage_email> >
> >
> >
>
>
>
> --
> Aaron "Optimizer" Digulla a.k.a. Philmann Dark
> "It's not the universe that's limited, it's our imagination.
> Follow me and I'll show you something beyond the limits."
>
http://www.pdark.de/>
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
>
http://xircles.codehaus.org/manage_email>
>