# Is it possible to dispatch on the arity of a function?

**URL:** <https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266>\
**Category:** New to Julia\
**Created:** [September 28, 2019, 10:29am UTC](https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266 "2019-09-28T10:29:00Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)\
**Post date:** [September 28, 2019, 10:29am UTC](https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266/1 "2019-09-28T10:29:00Z")

</div>

Say I want to dispatch `fn(gn::Function)` base on the arity of `gn`. Is it possible?

---

<div class="post-metadata">

**Author:** ![pablosanjose](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pablosanjose/32/7006_2.png) [@pablosanjose](https://discourse.julialang.org/u/pablosanjose)\
**Post date:** [September 28, 2019, 11:12am UTC](https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266/2 "2019-09-28T11:12:48Z")

</div>

Check out this thread

> [@Finding the number of arguments of an anonymous function](https://discourse.julialang.org/t/finding-the-number-of-arguments-of-an-anonymous-function/24394):
>
> I have an API wherein a kwarg is a function. function apifunc(; f::Function = identity) ... end I would like to do something different depending on the number of arguments of f, so that apifunc(f = x -\> 2) calls \_apifunc1(f) but apifunc(f = (x,y) -\> 2) calls \_apifunc2(f). Is there a way to achieve that, preferably in a non-dynamical way? In other words, is there any way to do introspection on the allowed signatures of a function’s methods?

TL;DR: ~~`isapplicable`~~ `applicable` is probably your best approach for this

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [September 28, 2019, 12:09pm UTC](https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266/3 "2019-09-28T12:09:45Z")

</div>

Methods are not first-class citizens in Julia, so you can’t directly dispatch on the signature of a function. Using `isapplicabile` in the body of the function is an option, [`FunctionWrappers.jl`](https://github.com/yuyichao/FunctionWrappers.jl) is also often recommended in these cases, depending on what you exactly want to achieve

---

<div class="post-metadata">

**Author:** ![chakravala](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chakravala/32/6832_2.png) [@chakravala](https://discourse.julialang.org/u/chakravala)\
**Post date:** [September 28, 2019, 5:16pm UTC](https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266/4 "2019-09-28T17:16:16Z")

</div>

> [@pablosanjose](#):
>
> TL;DR: `isapplicable` is probably your best approach for this

That is incorrect, according to the thread it is `applicable` instead of `isapplicable`:

> [@Finding the number of arguments of an anonymous function](https://discourse.julialang.org/t/finding-the-number-of-arguments-of-an-anonymous-function/24394/29):
>
> FWIW, `applicable` seems to fare fairly well and should be safe:

---

<div class="post-metadata">

**Author:** ![pablosanjose](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pablosanjose/32/7006_2.png) [@pablosanjose](https://discourse.julialang.org/u/pablosanjose)\
**Post date:** [September 28, 2019, 8:35pm UTC](https://discourse.julialang.org/t/is-it-possible-to-dispatch-on-the-arity-of-a-function/29266/5 "2019-09-28T20:35:19Z")

</div>

Yep, my bad
