我定义了以下别名类型:
type PartiallyAppliedEither[A] = Either[String, A]
我可以看到以下编译:
def checkTypeEquality1(implicit ev: PartiallyAppliedEither[_] =:= Either[String, _]) = 1
checkTypeEquality1 //compiles
但是这些不:
def checkTypeEquality2[A](implicit ev: PartiallyAppliedEither[A] =:= Either[String, A]) = 1
checkTypeEquality2 //fails to compile.
def checkTypeEquality3[A](implicit ev: PartiallyAppliedEither[A] =:= Either[String, _]) = 1
checkTypeEquality3 //fails to compile.
为什么第一个等式得到解决,而另一个不解决?
答案 0 :(得分:3)
您没有指定参数import cv2
init_mask = cv2.imread('/path/to/mask.png',0)
img = cv2.imread('/path/to/image.png')
mask = np.zeros(image.shape[:2],np.uint8)
mask[init_mask == 255] = 1
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
mask, bgdModel, fgdModel =
cv2.grabCut(img,mask,None,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_MASK)
mask = np.where((mask==2)|(mask==0),0,1).astype('uint8')
mask[mask == 1] = 255
np.all(mask==init_mask) # True
应该是什么,因此编译器甚至无法开始搜索隐式证据,因为它不知道应该找到的东西的类型。
这里的行为完全符合预期:
A
最后一个不会编译,因为如果编译成功,则意味着每种类型都等于其他任何类型,但这不是事实。