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はある。

github.com

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/