4

簡単にするために、2 つの引数を持つ関数を作成しようとしています。

  1. 基本メソッドは引数として 2 つの整数を受け入れます

    func(x::Int, y::Int) = 何か

  2. 追加のメソッドは、いずれかまたは両方の引数を任意の型として受け入れ、これらの引数を整数にマップし、基本メソッドを呼び出します

  3. 追加のメソッドは、いずれかまたは両方の引数を配列 (または ::Colon 型) として受け入れ、適切な前のメソッド (1) または (2) を要素ごとに適用して配列を生成します。

当然のことながら (後から考えると)、このアプローチはメソッドのあいまいさを生み出します。関数に提供される引数の型が与えられると、Julia は最も具体的な型を持つ有効なメソッドを選択します。しかし、x が配列で y が Int の場合、次のメソッドは同じように具体的であり、Julia はどれを呼び出すべきかわかりません。

  • func(x::Any, y::Int)
  • func(x::配列, y::任意)

私は次のようなことをしたいと思います

  • func(x::T, y::Int) T <: any_so_long_as_not_array = func(map_x_to_Int(x), y)
  • func(x::Array, y::Any) = (el -> func(el, y)).(x)

ノータイプの物などはありますか?私はこれについて間違った方法で考えていますか?この種の問題にアプローチする標準的な方法はありますか?

コンテキストとして、私が書いた構造体に Base.getindex を実装しようとしています。構造体の内容が多少多様である場合に、構造体にインデックスを付けるためのさまざまな方法を getindex でサポートしたいと考えています。内部では、構造体の要素は整数によってインデックス付けされますが、ユーザーは構造体の要素にインデックスを付けるためにほぼ任意の非整数型を使用している可能性があります (特定の型を使用してインデックス付けするようユーザーに強制したくありません)。要素)。

4

1 に答える 1