我具有以下Haskell函数
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat
fun (Vertex3 x0 y0 z0) (Vertex3 x1 y1 z1) = do sth here
where
p0 = (Vertex3 x0 y0 z0)
p1 = (Vertex3 x1 y1 z1)
p = p0 + p1
我想知道是否有一种方法不再重复
(Vertex3 x0 y0 z0) (Vertex3 x1 y1 z1)
位于代码内
我正在寻找类似的东西:
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat
fun p0 p1 = do sth here
where
p0 = (Vertex3 x0 y0 z0)
p1 = (Vertex3 x1 y1 z1)
p = p0 + p1
答案 0 :(得分:6)
是的,您可以使用as-pattern [AGItH'98]:
fun::Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat
fun p0@(Vertex3 x0 y0 z0) p1@(Vertex3 x1 y1 z1) = do sth here
where p = p0 + p1
因此,这里我们同时引用了参数p0
和数据构造函数中的元素(x0
,y0
,z0
)。
这些 as-patterns 可以在模式中的不同级别使用。