# Conversion of parameters in function call

**URL:** <https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [May 13, 2017, 7:09pm UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693 "2017-05-13T19:09:53Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![scelles](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scelles/32/220408_2.png) [@scelles](https://discourse.julialang.org/u/scelles)\
**Post date:** [May 13, 2017, 7:09pm UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/1 "2017-05-13T19:09:53Z")

</div>

Hello,

I’d like to automatically convert some parameters of a function.

I defined a type using

```julia
type Pin
    number::Int
end

```

and a function

```julia
function hi(pin::Pin)
    println(pin)
end

```

I can do this

```julia
pin = Pin(10)
hi(pin)

```

but I’d like to also be able to do

```julia
hi(10)

```

I tried to define a conversion using

```julia
convert(::Type{Pin}, pin::Int) = Pin(pin)

```

I can test it using:

```julia
println(convert(Pin, 10))

```

it displays `Pin(10)`

but

```julia
hi(10)

```

raises `MethodError`

Is there a better way to do this instead of doing

```julia
function hi(pin::Int)
    hi(Pin(pin))
end

```

because this kind of solution is no very viable if I want to have an “automatic” conversion of several parameters in a function call.

Kind regards

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [May 13, 2017, 7:32pm UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/2 "2017-05-13T19:32:47Z")

</div>

No. Doing that is incompatible with multiple dispatch.

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [May 13, 2017, 8:56pm UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/3 "2017-05-13T20:56:45Z")

</div>

It’s not clear what you want to do with the several parameters, but maybe something like this:

```julia
function hi(pin)
    hi(Pin(pin))
end

function hi(params...)
    return map(Pin, params)
end

julia> hi(3, 4)
(Pin(3),Pin(4))

```

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [May 13, 2017, 9:59pm UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/4 "2017-05-13T21:59:11Z")

</div>

Would such approach meet your requirements?

```julia
type Pin
    number::Int
end

convert(::Type{Pin}, pin::Int) = Pin(pin)
convert(::Type{Pin}, pin::Pin) = pin # or Pin(pin.number)

function hi(pin::Pin)
    println(pin)
end

function hi(params...)
    for p in params
        hi(convert(Pin, p))
    end
end

```

In this way you can write `hi(10, Pin(20), 30, Pin(40))` - you can pass to `hi` anything that is convertible to `Pin`.

---

<div class="post-metadata">

**Author:** ![sdanisch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sdanisch/32/1406_2.png) [@sdanisch](https://discourse.julialang.org/u/sdanisch)\
**Post date:** [May 13, 2017, 10:27pm UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/5 "2017-05-13T22:27:37Z")

</div>

If you don’t need to type the arguments, you could also do:

```nohighlight
function hi(arg)
    pin = convert(Pin, arg)
    println(pin)
end

```

And do appropriate error handling in `convert`!

---

<div class="post-metadata">

**Author:** ![Stephen\_Vavasis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stephen_vavasis/32/3389_2.png) [@Stephen\_Vavasis](https://discourse.julialang.org/u/Stephen_Vavasis)\
**Post date:** [May 14, 2017, 1:01am UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/6 "2017-05-14T01:01:42Z")

</div>

Although you didn’t ask, I’ll point out that for a composite type with a single Int as its member, you would most likely prefer `immutable` (called `struct` in 0.6 and higher) rather than `type` (called `mutable struct` in 0.6 and higher). Declaring Pin as immutable will in many circumstances improve performance, prevent subtle bugs and improve readability.

---

<div class="post-metadata">

**Author:** ![scelles](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scelles/32/220408_2.png) [@scelles](https://discourse.julialang.org/u/scelles)\
**Post date:** [May 14, 2017, 7:12am UTC](https://discourse.julialang.org/t/conversion-of-parameters-in-function-call/3693/7 "2017-05-14T07:12:09Z")

</div>

Thanks all for your nice help.
