Closed oyamad closed 8 years ago
これは要素がない空のタプル型が唯一Tuple{}
のみであるのに起因していると思います。
以下の例のように、2個目の型変数にInt
が入ろうがFloat64
が入ろうが同じ型(Tuple{}
)になります。
julia> NTuple{0,Int} === NTuple{0,Float64}
true
julia> NTuple{0,Int} === Tuple{}
true
julia> NTuple{0,Float64} === Tuple{}
true
ですので、N=0
のときのどちらのメソッドを読んでよいか分からなくなるので、Tuple{}
に対してメソッドを定義してあげれば、一番specificなTuple{}
に対応するメソッドが呼ばれるようになり、曖昧性がなくなると思います。中身の定義は、空のタプルに対して呼ばれたときにどういう振る舞いを期待するかで決まると思います。
ああなるほど,よくわかりました.ありがとうございました.
(Tuple{}
を Tuple
あるいは Tuple{Any}
のことと勝手に誤解してました.)
Google で検索してもどうもヒットしないのでこちらで質問させていただきます.
function MyType(t::Tuple{})
を定義しろということだと思うのですが,中身は何を定義すればよいのでしょうか.(実際はもう少し複雑なことをやっているのですが,簡単な例にしてみました.)
Method Ambiguities に説明があるようなケースなら理解できるのですが,上のような例では ambiguity がなさそうにも思えるのですが.