以下代码是否使用 C++ 或 Java 中所理解的动态调度?
据我了解,在最后一行,编译器不可能在编译时知道要调用 (==) 的哪个实现,但是代码可以编译并产生正确的结果。有人可以解释一下,这背后有什么样的实现(例如vptr)?
{-# LANGUAGE ExistentialQuantification #-}
data Value = A Int
data ForallFunc = forall a. Eq a => Forall (Value -> a)
unpackA (A int) = int
equalityTest :: Value -> Value -> ForallFunc -> Bool
equalityTest arg1 arg2 (Forall unpacker) =
let a1 = unpacker arg1
a2 = unpacker arg2 in
a1 == a2