ruby-signature書いていて可変長引数の型についてよくわからなかったので調べた
ruby-signatureで Enumerable#zip
の型を書こうとして参考に Array#zip
みたらどうも嘘、ではないけど引数として単一の型の可変長引数は受け付けるけど返す型は引数が1個の場合のみしか書かれていないように見えた。
実用上使うの3個ぐらいしかzipしないじゃろ...とかzipの引数 *
で展開とかしないだろ...という前提でこうするのはいいかもしれないけど、実際すぐ破滅しそうな気がする
def zip: [U] (::Array[U] arg0) -> ::Array[[Elem, U]] | [U0, U1] (::Array[U0] arg0, ::Array[U1] arg1) -> ::Array[[Elem, U0, U1]] | [U0, U1, U2] (::Array[U0] arg0, ::Array[U1] arg1, ::Array[U2] arg2) -> ::Array[[Elem, U0, U1, U2]]
他の言語ではどうしてるんだろう?と思ってTypeScriptで調べてみたらどうやらまだない、issueはある。