If I have a function with optional arguments like

```
add(a=2;b=3)=a+b
```

is it possible to find out what the defaults are?

If I have a function with optional arguments like

```
add(a=2;b=3)=a+b
```

is it possible to find out what the defaults are?

I don’t think so. Default arguments just result in Julia creating extra methods for your function. For example:

```
julia> f(x=5) = x + 1
f (generic function with 2 methods)
julia> methods(f)
# 2 methods for generic function "f":
f() in Main at REPL[1]:1
f(x) in Main at REPL[1]:1
```

Defining `f(x=5) = ...`

actually defined two methods:

```
f(x) = ...
f() = f(5)
```

so inside the inner method (`f(x)`

), there’s no indication whether the `x`

it received was a default argument or not. Keyword arguments do something similar by creating an inner function without keyword arguments.

What are you actually trying to do? Perhaps there’s another way.

I have a simulation with certain default parameters. Then I want to double and halve these parameters and record the results. I can do this simply by putting all the parameters in a list but I wondered if I can also do it via writing something like

```
add(a=defaults(add).a*2)
```

or something.

Ah, no, that’s not possible. After all, you could have arbitrarily many methods named `add`

, so what would `defaults(add)`

possibly return?

Instead, if you put your parameters in a `struct`

and pass that struct to your function, manipulating the parameters as a group becomes much easier. Check out https://github.com/mauro3/Parameters.jl for some macros to make constructing parameter structs easier.