8

両方の引数が同じ型である限り、任意の型の 2 つの引数を受け入れる関数が必要であると仮定しましょう。mypyで静的にチェックするにはどうすればよいですか?

関数が既知の型の有限量を受け入れるだけでよい場合は、次のように簡単です。

from typing import TypeVar, List, Callable

T = TypeVar('T', int, str, List[int], Callable[[], int])

def f(a: T, b: T) -> None:
   pass

f(1, 2)
f("1", "2")
f([1], [2])
f(lambda: 1, lambda: 2)
f(1, "2") # mypy will print an error message

このコードでは、 mypy は への引数fが 2 つintの 、2 つstrの 、または の 2 つのリスト、intまたは を返す引数ゼロの 2 つの関数であることを確認できintます。

しかし、事前に型がわからない場合はどうなるでしょうか。let f (a:'t) (b:'t) = ()F# や OCamlに似たものが必要な場合はどうすればよいでしょうか? 単純に書くと有効なT = TypeVar('T')ようになりますが、これは私たちが望んでいることではありません。f(1, "2")

4

1 に答える 1