基本的に、@Michael K. Borregaardのtry-catchの使用は正解で正式に機能します。
非公式の実装の詳細を見ると、私はfollowngを思い付いた:
haskw(f,tup) = isdefined(typeof(f).name.mt,:kwsorter) &&
length(methods(typeof(f).name.mt.kwsorter,(Vector{Any},typeof(f),tup...)))>0
あり、一般的な機能のいずれかの方法上の任意のキーワードの処理があり、そうであれば、見た場合、この関数は、最初に見えます型の特定のタプル。例えば
:非リーフタイプが含まれる場合、それはおそらく動作しないよう
julia> f(x::Int) = 1
f (generic function with 1 method)
julia> f(x::String ; y="value") = 2
f (generic function with 2 methods)
julia> haskw(f,(Int,))
false
julia> haskw(f,(String,))
true
これは、特定のアプリケーションのためにテストする必要があります。マイケルがコメントしたように、質問の文脈では、ステートメントは次のようになります。
if haskw(fun, typeof.(ar))
...
なぜこのように機能を構築する必要がありますか?私は 'foo'が何であるかは分かりませんが、' ar :: Tuple =()、kw :: Tuple =() 'のデフォルト値はどうでしょうか?楽しみがkwargsを持っているなら、おそらくKwはそれらを保持します(あなたの例で)。 –
私はこれに関する問題を開いています:https://github.com/JuliaLang/julia/issues/20555 –
答えに感謝します。kw =()を使用すると、関数に渡すとBoundsErrorが発生します。 – Maxime