Usages of defaultParameters and parameterNames

David Nolden zwabel at googlemail.com
Sun Feb 24 22:24:20 UTC 2008


On Sunday 24 February 2008 14:25:18 Andreas Pakulat wrote:
> On 24.02.08 13:58:42, Andreas Pakulat wrote:
> > Hi,
> >
> > how are the above functions from AbstractFunctionDeclaration used in
> > C++? According to the docs defaultParameters may be a problem for
> > python, because a python function can have:
> >
> > def foo(bar=1,*foo,**baz)
> >
> > i.e. the last defaultParameter is not necessarily the last paramter. I'm
> > thinking we might need to introduce a proper list of structures there,
> > something very simple with just a name an optional a value.

The problem is memory-usage, because that list would be created for every 
single function out there. What about just filling up the not given 
default-parameters with QString()?

> Actually, I've got even worse problems. I can't really fill these except
> for the simplest case of a parameter name. But in python I can also have
> a list of parameter names (like def foo( (bar,baz,foo) ) as 1 argument.
> Where of course each name is a separate variable inside the function,
> but you can only call that function either as
>
> foo() or foo([1,5,2]) (or anything else in the list). And I can access
> the 3 elements with the names.
>
> So I'm thinking about simply not filling these, if they're not that
> important.
I think currently the parameter-names are used while completion to show the 
name. However it should also be possible to extract them from the 
function-context, so maybe we could even remove that whole thing.

> Also something similar exists for the default values, that can be any
> arbitrary expression.

In C++ the default-values are evaluated as expressions on demand, and are also 
shown in the argument-hints, so they are quite useful. Probably in python 
they should be useful too.

However, are single default-parameters even possible for that "(bar, baz, 
foo)" thing? Doesn't python expect the given parameter to be a 3-tuple, so a 
default-parameter should more look like def foo( (bar,baz,foo) = [0,1,2] ). 
So the problems would be those *foo and **baz things, but I would also count 
those as single parameters, so it should be possible to fill the 
default-parameters.

Greetings, DAvid




More information about the KDevelop-devel mailing list